在django

时间:2016-08-23 13:42:12

标签: python django django-models

我正在尝试轻松地呈现来自两个不同表(类)的数据。我有一个包含所有环境详细信息的Environment类和一个包含所有环境中历史记录更改的Changes类。

我的观点目前正在显示我的所有Environment个详细信息。我想在此视图中添加对每个环境进行的最后一次更改(例如,最后修改者:User)。

我的models.py看起来像这样:

class System(models.Model):
    system_name = models.CharField(max_length=40, blank=True)
    system_id = models.CharField(max_length=100, blank=True)
    system_clusters = models.ManyToManyField(Cluster, blank=True)
    system_owner = models.CharField(max_length=20, blank=True)

    def __str__(self):
        return self.system_name

class Changes(models.Model):
    date = models.DateTimeField(auto_now_add=True)
    cluster = models.ForeignKey(System, on_delete=models.CASCADE)
    user = models.CharField(max_length=20, blank=True)
    change_reason = models.CharField(max_length=50, blank=True)

    def __str__(self):
        return self.date

首先,我将字典传递给我的模板,其中system为关键字,change为值:

last_changes = {}
change =   Changes.objects.filter(cluster__in=s.system_clusters.all()).order_by('-id')[0]
last_changes[s.system_id] = change.change_reason

即使它部分有效(我仍然试图在我的模板中解析dict),我觉得这不是正确的任务方法。

我希望得到一个结果,我可以在模板中调用system.last_change。我可以为System课程添加另一个字段,该字段将指向last_change表格中的Changes吗?

1 个答案:

答案 0 :(得分:1)

您可以在System上编写一个方法来返回项目的最后一次更改:

def last_change(self):
    return self.changes_set.order_by('-date').first()

现在你确实可以在模板中调用system.last_change