Я не уверен, если это возможно.Я пытаюсь использовать 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
для обработки ('aliment', 'quantite')
из Ingredient
.Вот мои формы:
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).
Единственный способ для пользователя добавить элемент в список 2 - нажать некоторую «кнопку добавления» в списке 1.
Проблема в том, что ModelChoiceField
поставляется с select, который содержит все Aliment
экземпляриз базы данных.
Я хотел бы управлять своего рода кортежем ('aliment.id', 'aliment.libelle', 'quantite')
для каждого Ingredient
, который принадлежит 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.
Не могли бы вы высказать некоторые предложения, пожалуйста.
Спасибо!