django模型创建不起作用

时间:2016-08-20 07:43:04

标签: python django django-models

我在我的应用程序中添加了一个名为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.

我认为这是另一个问题,因为如果我评论多对多关系,它就完成了,没有错误(仍然没有新记录)。我提到它就好像它可能有所帮助。

我检查了数据库,表格在那里,也没有检测到新的迁移。

对于可能出现问题的任何帮助和想法都将不胜感激!

1 个答案:

答案 0 :(得分:1)

您已经覆盖了save方法,因此它实际上从未保存过任何内容。你需要在最后调用超类方法:

def save(self, *args, **kwargs):
    if not self.pk:
        ...
    return super(SocialProfile, self).save(*args, **kwargs)