如何访问由 DetailView 和 CreateView 的外键连接的两个模型?
How can I access two models connected by a foreignkey for a DetailView and a CreateView?
我正在构建一个 wiki,需要保存对每个 wiki 页面所做的每个修订。这意味着我需要为每个创建的维基页面创建一个新的修订表。
在使用 DetailView 显示每个维基页面模板时,我需要访问 Wikipage.title、最新修订版及其 Revision.content、Revision.author、Revision.last_edit 和 Revision.comment .我已经能够通过设置 "model=Wikipage" 和修订,通过设置 "model=Revision" 访问标题,但不能同时访问这两者。
models.py
class Wikipage(models.Model):
title = models.CharField(max_length=100)
date_created = models.DateTimeField('Created', auto_now_add=True)
def __str__(self):
return self.title
class Meta:
verbose_name_plural = "Wikipages"
class Revision(models.Model):
wikipage = models.ForeignKey(Wikipage, null=True,
on_delete=models.CASCADE, related_name='revision')
content = models.TextField('Content')
author = models.ForeignKey(User, null=True,
on_delete=models.SET_NULL)
last_edit = models.DateTimeField('Last edit', auto_now=True)
comment = models.TextField('Comment', blank=True)
class Meta:
verbose_name = 'Revision'
verbose_name_plural = 'Revisions'
ordering = ['-last_edit']
get_latest_by = ['last_edit']
def __str__(self):
return self.content
我想用django自带的DetailView和CreateView,但是都没有成功访问到这两个表的具体数据。
我已经让 ListView 正常工作,但这只需要来自 Wikipage 的标题,而不需要来自 Revision 的任何内容。
在 DetailView
上,您可以使用 wikipage.revision
访问所有修订,其中 wikipage 是 DetailView
的对象,您可以查询修订以获取最新版本。
我也会推荐这个改变
wikipage = models.ForeignKey(Wikipage, null=True, on_delete=models.CASCADE, related_name='revision')
成为
wikipage = models.ForeignKey(Wikipage, null=True, on_delete=models.CASCADE, related_name='revisions')
您可以通过 wikipage.revision.latest()
访问 wiki 页面的最新修订,因为您在修订模型上正确定义了 get_latest_by
。您可以直接在模板中执行此操作:
{% with wikipage.revision.latest as revision %}
{{ revision.last_edit }}
{{ revision.comment }}
{% endwith %}
我正在构建一个 wiki,需要保存对每个 wiki 页面所做的每个修订。这意味着我需要为每个创建的维基页面创建一个新的修订表。
在使用 DetailView 显示每个维基页面模板时,我需要访问 Wikipage.title、最新修订版及其 Revision.content、Revision.author、Revision.last_edit 和 Revision.comment .我已经能够通过设置 "model=Wikipage" 和修订,通过设置 "model=Revision" 访问标题,但不能同时访问这两者。
models.py
class Wikipage(models.Model):
title = models.CharField(max_length=100)
date_created = models.DateTimeField('Created', auto_now_add=True)
def __str__(self):
return self.title
class Meta:
verbose_name_plural = "Wikipages"
class Revision(models.Model):
wikipage = models.ForeignKey(Wikipage, null=True,
on_delete=models.CASCADE, related_name='revision')
content = models.TextField('Content')
author = models.ForeignKey(User, null=True,
on_delete=models.SET_NULL)
last_edit = models.DateTimeField('Last edit', auto_now=True)
comment = models.TextField('Comment', blank=True)
class Meta:
verbose_name = 'Revision'
verbose_name_plural = 'Revisions'
ordering = ['-last_edit']
get_latest_by = ['last_edit']
def __str__(self):
return self.content
我想用django自带的DetailView和CreateView,但是都没有成功访问到这两个表的具体数据。 我已经让 ListView 正常工作,但这只需要来自 Wikipage 的标题,而不需要来自 Revision 的任何内容。
在 DetailView
上,您可以使用 wikipage.revision
访问所有修订,其中 wikipage 是 DetailView
的对象,您可以查询修订以获取最新版本。
我也会推荐这个改变
wikipage = models.ForeignKey(Wikipage, null=True, on_delete=models.CASCADE, related_name='revision')
成为
wikipage = models.ForeignKey(Wikipage, null=True, on_delete=models.CASCADE, related_name='revisions')
您可以通过 wikipage.revision.latest()
访问 wiki 页面的最新修订,因为您在修订模型上正确定义了 get_latest_by
。您可以直接在模板中执行此操作:
{% with wikipage.revision.latest as revision %}
{{ revision.last_edit }}
{{ revision.comment }}
{% endwith %}