1

我正在构建一个 wiki,需要保存为每个 wikipage 所做的每个修订。这意味着我需要为每个创建的维基页面创建一个新的修订表。

当使用 DetailView 呈现每个 wikipage 模板时,我需要访问 Wikipage.title、最新修订及其 Revision.content、Revision.author、Revision.last_edit 和 Revision.comment。通过设置“model=Wikipage”和修订版,通过设置“model=Revision”,我已经能够访问标题,但不能同时设置两者。

模型.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 的任何内容。

4

2 回答 2

0

在 上,您可以使用wikipage 的对象DetailView访问所有修订,并且您可以查询修订以获取最新的修订。wikipage.revisionDetailView

我也会推荐这个改变

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')
于 2019-07-02T13:12:17.087 回答
0

您可以通过 访问 wikipage 的最新版本,因为您在 Revision 模型上已wikipage.revision.latest()正确定义。get_latest_by您可以直接在模板中执行此操作:

{% with wikipage.revision.latest as revision %}
  {{ revision.last_edit }}
  {{ revision.comment }}
{% endwith %}
于 2019-07-02T14:07:13.423 回答