【问题标题】:django - dynamic filed - error : Select a valid choice. That choice is not one of the available choicesdjango - 动态字段 - 错误:选择一个有效的选项。该选择不是可用的选择之一
【发布时间】:2017-11-23 23:05:07
【问题描述】:

我有以下型号。

class Category(MPTTModel):
    name=models.CharField(max_length=75,null=False,blank=False, unique=True)
    parent=TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True)

class ProductGroup(models.Model):
    name = models.CharField(max_length=30,null=False, blank=False)
    category=TreeForeignKey('category.Category', null=False,blank=False)

class Product(models.Model):
    product_group=models.ForeignKey('productgroup.ProductGroup', null=False,blank=False)
    manufacturer=models.ForeignKey(Manufacturer, null=False,blank=False)
    product_type=models.CharField(max_length=2, choices=PRODUCT_TYPE,)
    opening_stock=models.PositiveIntegerField(default=0)

这是我的观点和形式。

class CreateProduct(CreateView):
    model=Product
    form_class=ProductForm

class ProductForm(forms.ModelForm):
        def __init__(self, *args, **kwargs):
            user = kwargs.pop('user','')
            super(ProductForm, self).__init__(*args, **kwargs)
            self.fields['category']=TreeNodeChoiceField(queryset=Category.objects.all())
            self.fields['category'].required = False
            self.fields['product_group']=forms.ModelChoiceField(queryset=ProductGroup.objects.none())
            original_fields = self.fields

            new_order = OrderedDict()
            for key in ['category','product_group', 'manufacturer', 'product_type', 'wheel_position', 'opening_stock']:
                new_order[key] = original_fields[key]
            self.fields = new_order
        class Meta:
            model = Product     
            fields=['product_group', 'manufacturer', 'product_type', 'wheel_position', 'opening_stock']

GetProductGroups Ajax 视图

def GetProductGroups(request):
    product_groups=ProductGroup.objects.filter(category__id=request.GET.get('id'))
    to_json = []
    for pg in product_groups:
        # for each object, construct a dictionary containing the data you wish to return
        mydict = {}
        mydict['id'] = pg.id
        mydict['name'] = pg.name
        to_json.append(mydict)

    response_data = json.dumps(to_json)

    return HttpResponse(response_data, content_type="application/json") 

product_form.html 中的 jquery ajax 查询

<script>
$("#id_category").change(function () {
  var category = $(this).val();
  $.ajax({
    method:'get',
    url: '/ajax/get_product_groups/',
    data: {
      'id': category
    },
    dataType: 'json',
    success: function (data) {

        $('#id_product_group').empty()
        $('#id_product_group').append(
                 $('<option></option>').val(0).html('------------')
             );
        $.each(data, function(key, value){
            $('#id_product_group').append(
                 $('<option></option>').val(value.id).html(value.name)
             );
        });
    }
  });

});
</script>

新的网址模式

url(r'ajax/get_product_groups/', GetProductGroups, name='ajax_get_product_groups'),

jquery 脚本完美地获取有关类别选择的数据,然而当按下提交按钮时,我收到以下验证错误 - 跨产品组字段。

选择一个有效的选项。该选择不是可用的选项之一 选择。

..相应的下拉菜单也被清空了。

谁能告诉我我的代码有什么问题?

谢谢。

screenshot of the form after submit

【问题讨论】:

    标签: jquery ajax django django-forms


    【解决方案1】:

    我不知道如何将新创建的字段与现有字段连接起来。 filter(category=self.data.get('category'))) 成功了

    self.fields['product_group']=forms.ModelChoiceField(queryset=ProductGroup.objects.filter(category=self.data.get('category')))
    

    【讨论】:

      猜你喜欢
      • 2018-06-11
      • 2021-04-12
      • 2020-10-30
      • 2018-08-13
      • 2017-12-30
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 2012-01-22
      相关资源
      最近更新 更多