Django ModelAdmin可以在"添加"中显示外键字段。和"改变"网页?

时间:2016-03-04 22:49:07

标签: python django

我正在使用Django 1.9设计一个数据库网站,在我的模型中,我有一个特许经营权'桌子和物品'表

以下是我的模特:

from django.db import models


class franchise(models.Model):
    """Parent to all entires in item db"""
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255)


class item(models.Model):
    """Core database containing all entries in db"""
    id = models.AutoField(primary_key=True)
    franchise = models.ForeignKey(franchise, on_delete=None)
    title = models.CharField(max_length=255)
    description = models.TextField()

正如您所见,' item'拥有特许经营权的外键'

我的admin.py文件:

from django.contrib import admin
from db.models import *


# Displaying the franchise database
class FranchiseAdmin(admin.ModelAdmin):
    list_display = ('name',)

admin.site.register(franchise, FranchiseAdmin)


# Displaying the core database
class ItemAdmin(admin.ModelAdmin):
    # Get name of parent franchise
    def get_franchise(self, obj):
        return obj.franchise.name
    # Columns to display
    list_display = ('title', 'get_franchise', 'description')

admin.site.register(item, ItemAdmin)

该功能' get_franchise'是的,我可以显示' name'的值来自列表页面上的外键表。我希望在Django admin中的条目添加和更改页面中实现相同的功能。

如何在'添加'中显示外键值?并且'改变'页面,所以我可以看到' name'当我在项目表中添加和更改行时父母特许经营权?

1 个答案:

答案 0 :(得分:1)

似乎您忘记将__str__方法(或__unicode__ for python 2)添加到模型中。没有必要创建特殊方法来显示ForeignKey s的值。

class franchise(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255)

    def __str__(self):  # __unicode__ for py2
        return self.name

class ItemAdmin(admin.ModelAdmin):
    list_display = ('title', 'franchise', 'description')