Разрешить пользователям создавать ингредиенты с помощью CreateView и поля ManyToMany

У меня есть форма, в которой пользователи могут создавать ингредиенты, используя jQuery Plugin для Custom Tags.

При отправке формы возникает ошибка Field 'id' expected a number but got 'b'., где каждая буква в ингредиенте (по сравнению со словом) воспринимается как элемент, который, как ожидается, уже существует в базе данных.

# form.py

class EatForm(forms.ModelForm):

    notes = forms.CharField(widget=forms.Textarea(attrs={"rows":3}),required=False)
    ingredient = forms.CharField(widget=forms.TextInput(),required=False)
    allergen = forms.CharField(widget=forms.TextInput(),required=False)

    class Meta:
        model = Eat
        fields = ["name", "notes", "meal","ingredient","allergen","favorite","datetime"]
# Models
class Eat(models.Model):

    MEAL_CHOICES = (
        ("breakfast", "Breakfast"),
        ("lunch", "Lunch"),
        ("dinner", "Dinner"),
        ("supper", "Supper"),
        ("snack", "Snack"),
        ("drink", "Drink"),
    )

    id = models.BigAutoField(primary_key=True, editable=False)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    name = models.CharField(max_length=255)
    notes = models.CharField(max_length=255, blank=True, null=True)
    meal = models.CharField(choices=MEAL_CHOICES, max_length=20)
    ingredient = models.ManyToManyField(Ingredient,blank=True)
    allergen = models.ManyToManyField(Allergen,blank=True)
    favorite = models.BooleanField(default=False)
    datetime = models.DateTimeField()
# View

class EatFormAddView(LoginRequiredMixin, CreateView):
    model = Eat
    template_name = "dashboard.html"
    success_url = reverse_lazy("core:activity")
    form_class = EatForm

    # get user
    # def get_object(self):
    #     return self.request.user

    # determine which submit button was pressed
    def form_valid(self, form):

        form.instance.user = self.request.user
        
        ingredients = form.cleaned_data['ingredient'].split(',')
        
        for ingredient in ingredients:
            try:
                ingredient_obj = Ingredient.objects.get(name=ingredient)
            except:
                ingredient_obj = Ingredient(name=ingredient)
                ingredient_obj.save()
        
        return super().form_valid(form)

Я создал поле формы, которое не было частью ModelForm, обработал его, а затем связал его с постом.

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