2017-03-17 4 views
0

私は現在、管理者が製品に、独自の「オプションセット」を追加作成することができますダイナミックな製品モデルを作成しようとしています後に追加され保存された選択肢は表示されません。例えばジャンゴ:MultiChoiceFieldが作成

、製品Aは、利用可能な400ミリメートル、500ミリメートルと600ミリメートル幅のフラップ弁を有しています。

これを容易にするために、私は3つのモデルを作成しました。これは、初期の作成中のため正常に動作

forms.py

class HeadwallVariationForm(forms.ModelForm): 
    flap_valve = forms.MultipleChoiceField(required=False, widget=forms.SelectMultiple) 

    def __init__(self, *args, **kwargs): 
     super(HeadwallVariationForm, self).__init__(*args, **kwargs) 
     self.fields['flap_valve'].choices = [(t.id, t.value) for t in ProductOption.objects.filter(option_set=1)] 

    def save(self, commit=True): 
     instance = super(HeadwallVariationForm, self).save(commit=commit) 
     return instance 

    class Meta: 
     fields = '__all__' 
     model = HeadwallProduct 

models.py

# A container that can hold multiple ProductOptions 
class ProductOptionSet(models.Model): 
    title = models.CharField(max_length=20) 

# A string containing the for the various options available. 
class ProductOption(models.Model): 
    value = models.CharField(max_length=255) 
    option_set = models.ForeignKey(ProductOptionSet) 

# The actual product type 
class HeadwallProduct(Product): 
    dimension_a = models.IntegerField(null=True, blank=True) 
    dimension_b = models.IntegerField(null=True, blank=True) 

# (...more variables...) 
    flap_valve = models.CharField(blank=True, max_length=255, null=True) 
...とフォーム...製品。 MultipleChoiceFormのリストにProductOptionSetの項目が入力され、フォームを保存できます。

しかし、管理者が製品AのProductOptionSetにオプションとして700mmフラップバルブを追加すると、物が崩れます。新しいオプションは既存の製品の管理領域に表示され、製品の保存時にデータベースに保存されますが、管理領域では選択されたものとして表示されません。

製品Bが作成された場合、新しいオプションは意図したとおりに機能しますが、既存の製品に新しいオプションを追加することはできません。

なぜこれが起こるんし、私はそれを修正するために何ができるのでしょうか?ありがとう。変更

答えて

0

Urgh ...私はそれを考え出した、約4時間後に...

class ProductOption(models.Model): 
    option_value = models.CharField(max_length=20) 
    option_set = models.ForeignKey(ProductOptionSet) 

class ProductOption(models.Model): 
    value = models.CharField(max_length=20) 
    option_set = models.ForeignKey(ProductOptionSet) 

は私の問題を修正しました。

関連する問題