Django 使用 mixin 需要有一个字段"id"的值,然后才能使用这种多对多关系



我试图保存一个M2M对象(将其设置为默认值,即position= 1)当我用admin登录时是ok的。

问题我得到以下错误:

需要有字段"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

相关内容

最新更新