【问题标题】:Django - dynamic change form fieldsDjango - 动态更改表单字段
【发布时间】:2017-06-06 17:52:19
【问题描述】:

我有一个简单的表单来将网站添加到数据库。这是我的站点模型:

class Site(models.Model):
    category = models.ForeignKey('Category')
    category1 = models.ForeignKey('Category', related_name='+',)
    subcategory = ChainedForeignKey(
        'Subcategory',
        chained_field='category',
        chained_model_field='category',
        show_all=False,
        auto_choose=True)
    name = models.CharField(max_length=70)
    description = models.TextField()
    # importuje zmienione TextFields widgets.py
    keywords = MyTextField()
    date = models.DateTimeField(default=datetime.now, editable=False)
    url = models.URLField()
    is_active = models.BooleanField(default=False)
    group = models.CharField(max_length=2, choices=(('Basic',
                                                     'Basic'), ('Premium', 'Premium')))

subcategory1 = ChainedForeignKey(
    'Subcategory',
    chained_field='category1',
    chained_model_field='category1',
    related_name='subcategory1',
    show_all=False,
    auto_choose=True)

def get_absolute_url(self):
    return "%s/%i" % (self.subcategory.slug, self.id)

class Meta:
    verbose_name_plural = "Sites"

def __str__(self):
    return self.name

Forms.py

class SiteAddFormFull(forms.ModelForm):

    url = forms.URLField(widget=forms.TextInput(attrs={'readonly': 'readonly'}))

    class Meta:
        model = Site
        fields = ('url', 'name', 'description', 'keywords', 'group', 'category1','subcategory1')

我想通过在用户在组字段(“Premium”)中选择值后添加字段“Category1”、“Subcategory1”来更改我的表单。表单应该重新加载并显示这些字段。在选择“Premium”字段“Category1”之前,“Subcategory1”应该是不可见的。我怎样才能做到这一点?

在我的 forms.py 中我添加了:

widgets = {'category1': forms.HiddenInput(), 'subcategory1':
                   forms.HiddenInput()}

在我的 .js 文件中,我尝试显示这些字段,但它不起作用:

$(":hidden").show();
// $("#id_category1".show() and other posibilities

在我的页面中,我有

<input id="id_category1" name="category1" type="hidden" /><input id="id_subcategory1" name="subcategory1" type="hidden" />

为什么它不起作用?

【问题讨论】:

  • 加载所有数据并在客户端使用javascript来实现你想要的,或者每次字段更改时对服务器进行一些ajax调用以加载数据
  • 在表单初始化函数中,一旦您在js的帮助下选择高级版,将这些表单属性设置为隐藏删除隐藏属性

标签: django


【解决方案1】:

类别不需要HiddenInput。只需用 jquery 隐藏它并在选择更改事件中显示它。

<select id="group">
  <option value="First">First</option>
  <option value="Premium">Premium</option>
  <option value="Second">second</option>
</select>
<select id="category1">
  <option value="First">First</option>
  <option value="Second">second</option>
</select>

jQuery

$(document).ready(function(){
    $('#category1').hide();
    $('#group').change(function(e) {
  var group = $(this).val();
  if (group == 'Premium'){
    $('#category1').show();
  } else {
    $('#category1').hide();
  }
  });
});

https://jsfiddle.net/fwfm9byy/1/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 2015-09-09
    • 2011-02-07
    • 2014-02-05
    相关资源
    最近更新 更多