2017-06-21 27 views
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

答えて

0

私は既存のものと新たに作成されたフィールドを接続する方法については知りませんでした。 filter(category=self.data.get('category')))はトリックをした

self.fields['product_group']=forms.ModelChoiceField(queryset=ProductGroup.objects.filter(category=self.data.get('category'))) 
関連する問題