Django use mixin должен иметь значение для поля "id", прежде чем это отношение "многие-ко-многим" может быть использовано

Я пытаюсь сохранить объект M2M (установил его в значение по умолчанию, которое является тем, с позицией=1). Когда я вхожу в систему под администратором, все в порядке.

Проблема Я получаю следующую ошибку:

необходимо иметь значение для поля "id", прежде чем можно будет использовать это отношение "многие-ко-многим"

Models.py

class Categorymodel(models.Model):
    title=models.CharField(max_length=100)
    slug=models.CharField(max_length=100,unique=True)
    status=models.BooleanField(default=True)
    position=models.IntegerField()

    def __str__(self) -> str:
        return self.title

class Reportmodel(models.Model):
    subject=models.CharField(max_length=100)
    category=models.ManyToManyField(Categorymodel,related_name='info')
    user=models.ForeignKey(User,on_delete=models.CASCADE)

Mixin.py

class FormValidMixin():
    def form_valid(self,form):
        if self.request.user.is_admin:
            form.save()
    
        else:
            category1=(Categorymodel.objects.get(position=1))               
            self.obj=form.save(commit=False)  
            self.obj.user=self.request.user                                                                                                 
            self.obj.category.set(category1)

Вы должны сначала сохранить объект self.obj, прежде чем вы сможете изменить его отношение "многие-ко-многим", поэтому:

category1 = Categorymodel.objects.get(position=1)
form.instance.user = self.request.user
self.obj=form.save()  # ← save the object
self.obj.category.set([category1])  # ← use a list
Вернуться на верх