我对新版本的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
有什么想法吗?谢谢。
答案 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文档。