Django:根据外键存在为模型实例创建可编辑的默认值

Django: Creating editable default values for model instance based on foreignkey existance

我正在玩 Django,想知道是否有一种方法可以遍历我创建的两个不同模型的实例?

/ models.py:

class Tran(models.Model):
    name = models.CharField(max_length=300)
    description = models.CharField(max_length=2000)
    type = models.ForeignKey(TransactionType)
    def __str__(self):
        return self.name

 class DocLink(models.Model):
    trann = models.ForeignKey(Transaction)
    t_link = models.CharField(max_length=2000)
    t_display = models.CharField(max_length=1000)
    p_display = models.CharField(max_length=300)
    p_link = models.CharField(max_length=2000)
    def __str__(self):
        return self.link

我想做的事情:

查看每个 Tran 实例并在 DocLink table 中为 links/displays 创建默认值,而不是手动执行。

有没有什么方法可以指引我正确的方向?

如果您想在基于 trann 字段的 DocLink 实例中设置 links/displays 默认值,您可以覆盖模型的保存方法。

例如,下面的代码显示了如何设置 t_link 如果它没有值:

class DocLink(models.Model):
    trann = models.ForeignKey(Transaction)
    t_link = models.CharField(max_length=2000)
    t_display = models.CharField(max_length=1000)
    p_display = models.CharField(max_length=300)
    p_link = models.CharField(max_length=2000)
    def __str__(self):
        return self.link

    def save(self, *args, **kwargs):
        if not self.t_link:
            pass # TODO set self.t_link based on trann

        super(DocLink, self).save(*args, **kwargs)

您也可以将模型的 trann 字段更改为:

trann = models.ForeignKey(Transaction, related_name="doclinks")

然后通过以下方式访问 Tran 的所有文档链接:

# t is an instance of Tran class

t.doclinks.all()

所以你可以遍历这个列表并做你想做的事。