Django 实例需要有主键值,才能使用多对多关系
我现在要发疯了——我无法创建新的团队实例。Django始终显示错误:Django 实例需要有主键值,才能使用多对多关系,django,django-models,django-orm,Django,Django Models,Django Orm,我现在要发疯了——我无法创建新的团队实例。Django始终显示错误:“团队”实例需要有主键值,才能使用多对多关系。 这是我的模型: from django.contrib.auth.models import User from django.db import models class Team(models.Model): name = models.CharField(max_length=10) members = models.ManyToManyField(User
“团队”实例需要有主键值,才能使用多对多关系。
这是我的模型:
from django.contrib.auth.models import User
from django.db import models
class Team(models.Model):
name = models.CharField(max_length=10)
members = models.ManyToManyField(User)
def save(self, *args, **kwargs):
if self.pk:
# for later use
pass
super(Team, self).save(*args, **kwargs)
现在我想创建一个新团队
from django.contrib.auth.models import User
from models import Team
user_obj = User.objects.get(pk=1)
new = Team()
new.name = 'aaa'
new.save()
new.members.add(user_obj)
有人能看出这个错误吗
编辑
我已经阅读了文档和这个(非常好的)答案-仍然无法找出问题所在啊,这是在您的save()方法中。尝试此修复程序:
def save(self, *args, **kwargs):
obj = super(Team, self).save(*args, **kwargs)
if obj.id:
# for later use
pass
return obj
@init3接受的答案对我不起作用,因为obj一直解析为“非类型”,换句话说,调用super并没有返回任何内容。让它作为:
def save(self, *args, **kwargs):
super(Team, self).save(*args, **kwargs)
if self.pk:
pass
这段代码看起来是正确的。也许错误在别处?这是你的全部代码还是被截断了?你能发布一个完整的堆栈跟踪吗?有一个自定义的save方法-但它只调用
super(Team,self).
-这里是stacktrace:我看到这种情况的唯一方法是,不知何故,你的save()方法没有提交到数据库。请包含自定义save()方法的代码。使用save()方法更新了问题