我有以下模型:
class BoatImage(models.Model):
boat_photo = models.ImageField(upload_to=get_timestamp_path, blank=True,
verbose_name='Boat photo', )
boat = models.ForeignKey("BoatModel", on_delete=models.SET_NULL, verbose_name="Boat ForeignKey", null=True)
memory = models.PositiveSmallIntegerField(blank=True, null=True, default = ???)
目标是输入时,“ memory”字段中的默认值应选择“ boat”字段ID或PK,并将其保存在“ field”内存中,也就是说,两个字段中的id应一致。 我正在尝试将default与以下方法一起使用:
def funk(self):
return self.boat.id # or self.boat.pk or self.boat_id – no difference
但是它说– funk应该返回int,而不是Foreignkey(error)
问题是创建条目时如何将“ boat”字段的外键ID存储在“ memory”字段中?
可以在save()方法中执行此操作,但在我看来,这是一种非优雅的解决方案。
谢谢...
通过save()实现
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if self.boat and not self.memory: # save
self.memory = self.boat_id
elif not self.boat and self.memory: # restore
self.boat_id = self.memory
elif self.boat and self.memory and self.boat_id != self.memory: # correct
self.memory = self.boat_id
models.Model.save(self, force_insert=False, force_update=False, using=None,
update_fields=None)
答案 0 :(得分:1)
根据我的理解,您可以先做一件事,使用
保存模型default=0
在memory
字段中输入ID,然后运行更新查询