创建条目后,如何在其他模型字段的模型字段拾取数据中设置“默认”?

时间:2019-05-01 06:25:57

标签: django django-models

我有以下模型:

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)

1 个答案:

答案 0 :(得分:1)

根据我的理解,您可以先做一件事,使用

保存模型
default=0 

memory字段中输入ID,然后运行更新查询