用外键连接3种型号

时间:2015-01-25 02:50:33

标签: django

我是Django的新手。我有3个模型:大陆,国家,地区

以下是代码:

from django.db import models

# Create your models here.
class Continent(models.Model):
    continent = models.CharField(max_length=50, unique=True)

    class Meta:
        ordering = ['continent']

    def __str__(self):
        return self.continent

class Country(models.Model):
    country = models.CharField(max_length=50, unique=True)
    continent = models.ForeignKey(Continent)

    class Meta:
        ordering = ['country']
        verbose_name_plural = 'Countries'

    def __str__(self):
        return self.country

class Region(models.Model):
    country = models.ForeignKey(Country)
    region = models.CharField(max_length=50)

    class Meta:
        ordering = ['region']

    def __str__(self):
        return self.region

    def get_continent(self):
        return self.get_continent() 

我的admin.py看起来像这样:

    from django.contrib import admin
    from location.models import Continent, Country, Region

    # Register your models here.
    class MyAdmin1(admin.ModelAdmin):
        list_display = ['continent']
        #list_display_links = None
        #actions = None 

    class MyAdmin2(admin.ModelAdmin):
        list_display = ['country', 'continent']

    class MyAdmin3(admin.ModelAdmin):
        model = Region    
        list_display = ['region', 'country', 'get_continent']


    admin.site.register(Continent, MyAdmin1)
    admin.site.register(Country, MyAdmin2)
    admin.site.register(Region, MyAdmin3)

但是在管理面板中,当我点击表格区域时,它不会在3列中显示3个属性。请帮忙。

1 个答案:

答案 0 :(得分:1)

您可以在Region.get_continent()方法中获得无限递归:

class Region(models.Model):
    ...
    def get_continent(self):
        return self.get_continent() 

将其更改为:

    def get_continent(self):
        return self.country.continent