我有一个“Pizza”模型,它可以从“Pizza”的另一个示例继承“Toppings”。当我更新Pizza以添加新的浇头时,我需要阻止用户在父列表中选择Pizza的“self”示例。
例如:我创建了一个有奶酪和番茄配料的玛格丽塔比萨饼。然后我创建了另一个比萨饼(意大利辣香肠)并继承了玛格丽塔比萨饼的所有配料。我需要阻止意大利辣香肠出现在“父”列表中以阻止循环引用。
模型.py
class Topping(models.Model):
name = models.CharField(max_length=100)
class Pizza(models.Model):
name = models.CharField(max_length=100)
parents = models.ManyToManyField("self", symmetrical=False)
toppings = models.ManyToManyField(Topping)
表单.py
class PizzaForm(ModelForm):
toppings = forms.ModelMultipleChoiceField(
queryset=Topping.objects.all(),
widget=forms.CheckboxSelectMultiple,
required=False
)
parents = forms.ModelMultipleChoiceField(
queryset=Pizza.objects.all(),
widget=forms.CheckboxSelectMultiple,
required=False
)
class Meta:
model = Pizza
fields = '__all__'
查看次数.py
class PizzaUpdateView(UpdateView):
model = Pizza
form_class = PizzaForm
我怀疑我需要修改PizzaForm中的父查询集以排除PK,但我不确定如何将其传递给表单。
1条答案
按热度按时间rjzwgtxy1#
您可以覆写
PizzaForm
的init
方法: