Python django管理员:如何在管理页面中仅显示属于特定模型的项目?

时间:2018-08-09 14:56:26

标签: python django

我正在学习django,用于构建我的网站。 我学习了如何创建模型,视图,但是现在我对管理界面有一些疑问。 所以我有此代码:

from django.db import models

class AudioBook(models.Model):
    titolo=models.CharField(max_length=250)
    capitoli=models.ManyToManyField('Chapters')

class Chapters(models.Model):
    capitolo=models.CharField(max_length=250)

现在,当我添加新的有声读物时,我可以看到以前添加到其他有声读物的章节。这是不好的。我只希望这些章节属于该有声读物,因此,当我添加新的章节时,列表必须为空。

我尝试了一些操作:添加limit_choices_to = models.Q(audiobook__titolo=titolo),但这不起作用。

在命令行中,我可以通过在Chapters对象上添加过滤器来检索这些信息,但是我可以在管理界面中重现这种情况。 任何想法?我在Google上搜索,但没有找到任何对我有帮助的东西。

德国

1 个答案:

答案 0 :(得分:1)

对于ManyToMany关系,Django管理界面使您可以查看选择的完整列表,然后选择要添加到AudioBook对象的任何内容。 这并不意味着它们都属于该有声读物。所选的(添加到有声书中的)通常具有灰色背景

here's an example picture

如果该界面让您感到困扰,建议您在章节中添加AudioBook外键,而不要添加MAnyToMany关系:

class Chapters(models.Model):
    capitolo=models.CharField(max_length=250)
    audio_book = models.ForeignKey(AudioBook,on_delete=models.CASCADE)

在您的情况下,您会更放心。您仍然可以轻松地访问有声读物的章节。