如何在Django数据库中的模型中嵌套模型

时间:2018-04-02 05:21:27

标签: python django

我有以下型号,目前由ForeignKey连接:

class Topic(models.Model):
    text = models.CharField(max_length=200)
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__ (self):
        return self.text

class Entry(models.Model):
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE)  
    text = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = 'entries'

    def __str__(self):
        if len(self.text) > 50:
            return self.text[:50] + "..."
        else:
            return self.text

是否可以通过Django管理网站中的方式连接它们,我可以转到特定主题并显示所有条目的列表?目前没有显示任何内容,我只能在访问特定条目时看到连接(有一个下拉菜单说明当前条目属于哪个主题)。

编辑:这些是内联添加到admin.py:

from django.contrib import admin
from javascript.models import Topic, Entry

# Register your models here.

admin.site.register(Topic)
admin.site.register(Entry)

#inlines

class EntryInline(admin.TabularInline):
    model = Entry       

class TopicAdmin(admin.ModelAdmin):
    inlines = [EntryInline]

1 个答案:

答案 0 :(得分:1)

您可以继续使用inlines(TabularInline或StackedInline)

首先为您的条目创建内联类:

class EntryInlines(admin.TabularInline):
    model = Entry
    # you can customize fields displayed here; make any field as read only if you want

现在将EntryInlines包含到要显示数据的模型中(仅当外部Entry模型具有相应模型的外键时),如下所示:

class TopicAdmin(admin.ModelAdmin):
    inlines = [EntryInlines]  # you can add multiple inline tables too. pass it in the list
    # all other customization of your model admin if any

如果你有嵌套的外键,那么你需要添加这个第三方包,如django-nested-inline