0
私は次のモデルを持っています。django - 動的フィールドエラー:有効な選択肢を選択してください。その選択は、利用可能な選択肢の一つではない
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パターン
url(r'ajax/get_product_groups/', GetProductGroups, name='ajax_get_product_groups'),
しかし、の場合、jqueryスクリプトは完全にデータを取得します。送信ボタンを押すと、製品グループのフィールド全体で次の検証エラーが発生します。
有効な項目を選択します。その選択肢は利用可能な のいずれかの選択肢ではありません。
は、対応するドロップダウンがあまりにも空に取得し..and。
誰もが私のコードで間違って何を教えてもらえますか?
ありがとうございました。
screenshot of the form after submit