관리자가 자신의 "옵션 세트"를 제품에 추가 할 수있는 동적 제품 모델을 만들고자합니다.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)
에 :