【问题标题】:django use mixin needs to have a value for field "id" before this many-to-many relationship can be used在使用这种多对多关系之前,django 使用 mixin 需要有一个字段“id”的值
【发布时间】:2021-09-05 10:57:39
【问题描述】:

我正在尝试保存一个 M2M 对象(将其设置为默认值,即 position= 1 的那个) 当我用管理员登录时就可以了。

我收到以下错误的问题:

在使用这种多对多关系之前需要为字段“id”设置一个值

模型.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)

【问题讨论】:

  • 请将完整的错误回溯添加到您的问题中!

标签: python django django-views


【解决方案1】:

您应该首先保存 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

【讨论】:

    猜你喜欢
    • 2020-09-10
    • 2022-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多