我试图保存一个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