这是我的models.py
文件中的相关代码
class PhotoManager(models.Model):
id = models.AutoField(primary_key=True)
def model_instance_id(self):
return self.id
index = models.PositiveIntegerField(default = model_instance_id, blank=True, unique = False)
我要做的是将model id
字段值保存到索引字段中(以便稍后通过对Django Rest Framework的AJAX调用安全地对其进行编辑)。据我了解,将模型字段值保存到另一个字段的唯一正确选择是将默认值设置为函数。保存模型实例时出现错误:
TypeError:model_instance_id()缺少1个必需的位置参数:“ self”
无论如何,我不知道如何在提到的函数中引用ID字段。
我尝试使用save方法,但是它什么也没做
def save(self, *args, **kwargs):
if not self.index:
self.index = self.id
super().save(*args, **kwargs)
答案 0 :(得分:2)
问题是您在保存实例之前先设置了index
,这时新模型实例还没有id
。因此,您可以执行两个.save()
:一个在获取id
之前执行,另一个对save
新索引执行。
def save(self, *args, **kwargs):
if self.id is None:
super().save(*args, **kwargs)
if self.index is None:
self.index = self.id
super().save(*args, **kwargs)
话虽如此,但这仍然不是一个好主意:有多种方法来规避.save(..)
方法,例如在更新特定字段时等。
因此,我建议您创建一个_index
列,而不是NULL
,然后编写一个@property
来处理index
为{{ 1}}:
NULL
答案 1 :(得分:0)
调用函数时,应使用括号
index = models.PositiveIntegerField(default = model_instance_id(), blank=True, unique = False)