【发布时间】:2018-11-05 08:04:42
【问题描述】:
我不确定这是否可能。我正在尝试使用 Django (2.0) Form 和 Formset
在一个视图上。这是我的模型:
from uuid import uuid4
class Aliment(models.Model):
id = models.CharField(max_length=36, primary_key=True, unique=True, default=uuid4, editable=False)
libelle = models.CharField(max_length=50)
def __str__(self):
return self.libelle
class Menu(models.Model):
id = models.CharField(max_length=36, primary_key=True, unique=True, default=uuid4, editable=False)
libelle = models.CharField(max_length=50)
aliments = models.ManyToManyField(Aliment, through='Ingredient')
def __str__(self):
return self.libelle
class Ingredient(models.Model):
id = models.CharField(max_length=36, primary_key=True, unique=True, default=uuid4, editable=False)
aliment = models.ForeignKey(Aliment, on_delete=models.CASCADE)
menu = models.ForeignKey(Menu, on_delete=models.CASCADE)
quantite = models.IntegerField(default=0)
def __str__(self):
return "({0}:{1})".format(self.quantite, self.aliment)
我正在使用Formset 处理来自Ingredient 的('aliment', 'quantite')。这是我的表格:
class MenuModelForm(forms.ModelForm):
class Meta:
model = Menu
fields = ['libelle',]
class IngredientModelForm(forms.ModelForm):
class Meta:
model = Ingredient
fields = ['aliment', 'quantite',]
主要目的是,Menu 有几个Aliment 到Ingredient 类。
使用 javascript,我将 Aliment 项目从一个列表 (list1) 动态添加到 Menu.Ingredient 列表 (list2)。
用户在 list2 中添加项目的唯一方法是单击 list1 的某个“添加按钮”。
问题是ModelChoiceField 带有包含数据库中所有Aliment 实例的选择。
我会为每个Ingredient 管理一种元组('aliment.id', 'aliment.libelle', 'quantite')
属于Menu 实例。
一方面,我可以在我的Ingredient formset 模板中显示,如下所示:
<table>
{% for item in menu.ingredient %}
<tr>
<td>
<p name="{{ item.aliment.html_name }}" id="{{ fs.aliment.id_for_label }}"
value="{{ item.aliment.id }}">{{ fs.aliment.libelle }}</p>
</td>
<td><input type="number" name="{{ item.quantite.html_name }}" value="{{ item.quantite.value }}" id="{{ item.quantite.id_for_label }}" /></td>
</tr>
{% endfor %}
</table>
另一方面,获取Aliment 实例的Ingredient formset 迭代的方法是什么?
我不知道 Django Form 和 Django 哲学是不是为此而生的。
请给点建议。
谢谢!
【问题讨论】:
标签: django python-3.x django-forms formsets