2017-03-17 3 views
0

관리자가 자신의 "옵션 세트"를 제품에 추가 할 수있는 동적 제품 모델을 만들고자합니다.Django : MultiChoiceField가 생성 후 추가 된 저장된 선택 사항을 표시하지 않습니다.

예를 들어 제품 A에는 폭 400mm, 500mm 및 600mm의 플랩 밸브가 있습니다.

이를 위해 나는 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를 만든 경우 새 옵션이 의도 한대로 작동하지만 기존 제품에 새 옵션을 추가 할 수 없습니다.

왜 이런 일이 발생하며이를 해결하기 위해 무엇을 할 수 있습니까? 감사.

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

내 문제를 해결

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

에 :

답변

0

Urgh는 ... 약 4 시간 후에 나는

이 변경 ... 그것을 알아 냈다.