如何在调用save()后获取PK字段

时间:2015-03-20 07:06:47

标签: python django

我对新版本的Django有点棘手,我的想法是在保存之前创建一个实例并获取id或pk我重复字段而不保存。

class User(models.Model):
    .....
    slug = models.SlugField(max_length=100, unique=True)


    def save(self, *args, **kwargs):
        """
        I'm need instance of user for access first self.pk
        """
        self.slug = self.get_slug(self.pk)
        return super(User, self).save()

问题仍未定义“self.pk”单独执行此操作,直到您调用save()直到保存为止,我的想法是知道如何在不保存之前保存“self.pk”。

我认为它可以这样做,但是有什么不对或做得不好,有什么想法吗?

# My idea
def save(self, *ars, **kwargs):
    instance = super(User, self).save()
    self.slug = self.get_slug(self.pk)
    return instance

有什么想法吗?谢谢。

2 个答案:

答案 0 :(得分:0)

self参数是您要访问的用户的实例。

def save(self, *args, **kwargs):
    self.username  # This is username of the 
    self.slug  # This is user instance slug value
    super(User, self).save(*args, **kwargs)

答案 1 :(得分:0)

我会发表评论,但我没有足够的代表。

我假设你有一个必须是唯一的slu field字段? 你想使用id(默认django pk)来填充它吗? django id字段为AutoField,在保存时会获取值,因此在保存对象之前无法使用它。

黑客攻击:

# save in the model
def save(self, *args, **kwargs):
    # get_timestamp should return a string with the current time --> unique
    self.slug = get_timestamp()
    super(User, self).save(*args, **kwargs)
    self.slug = self.get_slug(self.pk)
    super(User, self).save(*args, **kwargs)

Here时间戳字符串的示例。如果您想创建自己的日期时间,请阅读有关日期时间,日历和日期的Python文档。