Как я могу реализовать тот же виджет, который Django использует для полей ManyToMany на странице администратора?

Мои модели:

class Ingredient(models.Model):
    BASE_UNIT_CHOICES = [("g", "Grams"), ("ml", "Mililiters")]
    CURRENCY_CHOICES = [("USD", "US Dollars"), ("EUR", "Euro")]

    ingredient_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=200)
    base_unit = models.CharField(max_length=2, choices=BASE_UNIT_CHOICES)
    cost_per_base_unit = models.FloatField()
    currency = models.CharField(
        max_length=3, choices=CURRENCY_CHOICES, default="EUR")

    def __str__(self):
        return self.name


class RecipeIngredient(models.Model):
    quantity = models.FloatField()
    ingredient_id = models.ForeignKey(Ingredient, on_delete=models.CASCADE)

    def __str__(self):
        return f"{self.quantity} / {self.ingredient_id}"


class Recipe(models.Model):
    recipe_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=200)
    ingredients = models.ManyToManyField(RecipeIngredient)
    date_created = models.DateTimeField('Date Created')

    def __str__(self):
        return f"{self.name}, {self.ingredients}"

Когда я использую страницу администратора, на ней есть кнопка +, которая позволяет мне создавать новые комбинации ингредиентов/количества

подобно этому

Но когда я пытаюсь использовать его из формы в своем коде, это выглядит как this

Вот код моей формы:

class AddRecipeForm(forms.ModelForm):
    class Meta:
        model = Recipe
        fields = ['name', 'ingredients', 'date_created']

Вы должны написать "виджеты" для каждого поля в вашей форме, которые нуждаются в конфигурации.

Проверьте документацию 'Widgets in forms', или даже, вы можете определить свои собственные Widgets.

Вернуться на верх