【问题标题】:Django admin with inlines, 1 model with 2 foreigns keys to 2 different models带有内联的 Django 管理员,带有 2 个外键的 1 个模型到 2 个不同的模型
【发布时间】:2015-08-29 18:11:12
【问题描述】:

我总共有 3 个模型。我的主模型有 2 个外键到 2 个不同的模型。因此,这些关系被设置为多对一。当我尝试自定义管理员时,我无法让它简单地允许我编辑主角模型并显示 2 个内联(宇宙和系列)。

最简单的方法是什么?由于两个外国领域正在抛弃一切,因此似乎有些模棱两可。我已经搜索了文档,但我一定错过了一些东西;我在管理员中进行了更复杂的多对多工作,所以这有点奇怪。

这是我的模型:

class CharacterSeries(models.Model):
    name = models.CharField(max_length=200)

    def __unicode__(self):
        return self.name


class CharacterUniverse(models.Model):
    name = models.CharField(max_length=200) 

    def __unicode__(self):
        return self.name


class Character(models.Model):
    name = models.CharField(max_length=200) 
    rating = models.DecimalField(max_digits=3, decimal_places=1)
    universe = models.ForeignKey(CharacterUniverse)    
    series = models.ForeignKey(CharacterSeries)

    def __unicode__(self):
        return self.name

这是我的管理员:

from django.contrib import admin
from .models import Character, CharacterUniverse, CharacterSeries

# Register your models here.


class SeriesInline(admin.TabularInline):
    model = Character

class UniverseInline(admin.TabularInline):
    model = Character

class Characterdmin(admin.ModelAdmin):
    inlines = [
        UniverseInline,
        SeriesInline,
   ]

admin.site.register(Character, CharacterAdmin)   

【问题讨论】:

    标签: django django-models foreign-keys django-admin


    【解决方案1】:

    更新

    我之前发布的代码错误!我没有仔细阅读你的模型。对此感到抱歉。

    如果您想在创建/编辑Character 时创建CharacterSeriesCharacterUniverse,您可以这样做:

    from django.contrib import admin
    from .models import Character, CharacterUniverse, CharacterSeries
    
    # No need to define `ModelAdmin` classes
    
    admin.site.register(Character)
    admin.site.register(CharacterUniverse)
    admin.site.register(CharacterSeries)
    

    上面的代码会在universeseries 字段之后为您提供一个+(加号)符号。这将帮助您动态创建CharacterUniverseCharacterSeries 对象

    【讨论】:

    • 刷新时出现内部服务器错误。 admin.site.register(Character, CharacterAdmin) 是导致它的行。
    • @klandshome 您是否从 admin.py 文件中删除了 class CharacterAdmin(...) 代码?如果是这样,你不应该那样做。
    • @klandshome 这很奇怪!错误信息是什么意思?
    • @klandshome 我在代码中犯了一个错误。我为此感到非常抱歉。不过,我已经更新了答案。
    • @klandshome Inlines 也有它们的用例。例如,在 Django 的默认投票教程中。添加投票时,您可以使用 inlines 为该投票添加许多选项。
    猜你喜欢
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2011-04-13
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多