Django: Как добавить значение ManyToMany в форму из другой модели - PullRequest
0 голосов
/ 15 апреля 2020

Итак, у меня есть 2 модели. Ингредиент и рецепт. Я хочу добавить как плюс кнопку с всплывающим окном, которое откроет модальные на этой странице, что позволит мне создать ингредиент. Я не хочу, чтобы пользователь создавал ингредиенты, а затем рецепт.

Мои модели:

class Recipe(models.Model):
    name = models.CharField(max_length=100, blank=False)
    ingredient = models.ManyToManyField('Ingredient',)
    for_persons = models.IntegerField(null=False)
    instruction = models.TextField(blank=True)

    def get_absolute_url(self):
        return reverse('Rezept-Detail', kwargs={'pk': self.pk}) 

class Ingredient(models.Model):
    name = models.CharField(max_length=100, blank=False)
    quantity = models.IntegerField(null=False, blank=False)
    UNIT_CHOICES = (
        ("ML", "Milliliter"),
        ("L", "Liter"),
        ("KG", "Kilogramm"),
        ("PCK", "Packung"),
        ("P", "Portion"),
    )
    unit = models.CharField(
        max_length=20,
        choices=UNIT_CHOICES
    )

    def __str__(self):
        return self.name

Моя форма:

class RecipeForm(forms.ModelForm):
    class Meta:
        model = models.Recipe
        fields = ['name', 'ingredient', 'for_persons', 'instruction']

Кто-то знает, как с этим справиться?

1 Ответ

1 голос
/ 15 апреля 2020

Добавляя кнопку в действие формы, которая вызывает представление добавления ингредиента, как показано ниже, я бы предложил использовать помощник по форме. в FormActions вы можете обновить модал для всплывающего окна. Вы можете проверить форму помощника по этой ссылке (https://django-crispy-forms.readthedocs.io/en/latest/form_helper.html)

class RecipeForm(forms.ModelForm):

    def __init__(self, user, *args, **kwargs):
        super(RecipeForm, self).__init__(*args, **kwargs)

        self.helper = FormHelper()
        self.helper.form_show_labels = True
        self.helper.layout = Layout(

           //some code for the fields goes here

            FormActions(
                Submit('save', _('Save')),
                HTML(
                    '<a href="link for the add ingredient" >' + _('New Ingredient ') + '</a>'),

            )
        )
    class Meta:
        model = models.Recipe
        fields = ['name', 'ingredient', 'for_persons', 'instruction']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...