django模型中的自定义保存方法和登录问题

时间:2013-11-20 14:43:07

标签: python django

我为我的模型编写了一个自定义保存方法:

class UserProfile(User):
      sex = models.SmallIntegerField(verbose_name=_(u'Sex'), choices=SEX_TYPES, default=1)
      .
      .


     def save(self, **kwargs):
         if self.pk is not None:
             UserSettings.objects.create(
                 user_id = self.pk
             )
         super(UserProfile, self).save(**kwargs)

class UserSettings(models.Model):
    user = models.ForeignKey('userprofile.UserProfile', verbose_name=_(u"User"), related_name='own_user', null=True, blank=True)

    def __unicode__(self):
        return unicode(self.id)

此自定义方法创建UserSettings对象(在寄存器中)。但在login之后,另一个UserSettings会创建。 我该如何避免这个问题?

1 个答案:

答案 0 :(得分:2)

使用get_or_create

def save(self, **kwargs):
    settings, created = UserSettings.objects.get_or_create(
        user_id=self.pk
    )
    super(UserProfile, self).save(**kwargs)