我在我的应用程序中添加了一个名为SocialProfile的新模型,该模型负责保持与UserProfile模型具有一对一关系的用户的社交相关属性。这是models.py中的SocialProfile模型:
class SocialProfile(models.Model):
profile = models.OneToOneField('UserProfile', on_delete=models.CASCADE)
facebook_profiles = models.ManyToManyField('FacebookContact', related_name='synced_profiles', blank=True)
google_profiles = models.ManyToManyField('GoogleContact', related_name='synced_profiles', blank=True)
hash = models.CharField(max_length=30, unique=True, blank=True)
def save(self, *args, **kwargs):
if not self.pk:
hash = gen_hash(self.id, 30)
while SocialProfile.objects.filter(hash=hash).exists():
hash = gen_hash(self.id, 30)
self.hash = hash
def __str__(self):
return str(self.profile)
现在,我记录了同步的facebook&谷歌个人资料。现在,问题是创建新对象实际上并没有在数据库中添加任何记录。我无法使用脚本或管理员创建实例。对于脚本,以下运行没有错误但没有创建记录:
for profile in UserProfile.objects.all():
sp = SocialProfile.objects.create(profile=profile)
print(profile, sp)
SocialProfile.objects.count()
打印完成,看起来正确,count()返回0.我尝试在admin中创建对象,但是我收到以下错误:
"{{socialprofile object}}" needs to have a value for field "socialprofile" before
this many-to-many relationship can be used.
我认为这是另一个问题,因为如果我评论多对多关系,它就完成了,没有错误(仍然没有新记录)。我提到它就好像它可能有所帮助。
我检查了数据库,表格在那里,也没有检测到新的迁移。
对于可能出现问题的任何帮助和想法都将不胜感激!
答案 0 :(得分:1)
您已经覆盖了save方法,因此它实际上从未保存过任何内容。你需要在最后调用超类方法:
def save(self, *args, **kwargs):
if not self.pk:
...
return super(SocialProfile, self).save(*args, **kwargs)