3

我有一个大学模型和另一个联系人模型:

class University(models.Model):

    abbrev = models.CharField(max_length=20, unique=True) # example "ASU" for Alabama State University
    name = models.CharField(max_length=512, unique=True)
    city = models.CharField(max_length=512)
    state = models.CharField(max_length=2, choices=STATE_CHOICES) # abbreviation
    region = models.CharField(max_length=2, choices=REGION_CHOICES) # examples Mid West, South Coast, etc.
    type = models.CharField(max_length=3, choices=TIPO_IES_CHOICES) # public, private, etc.

class UniversityContact(models.Model):

    person ...
    university ... # models.OneToOneField("University") ???

在管理界面上编辑 UniversityContact 时,我希望能够“拉”'abbrev', 'state', 'region','type'从大学与联系信息一起显示。那可能吗?它们不必在该上下文中是可编辑的。

我尝试将这些字段添加到 UniversityContact,全部为“ models.OneToOneField("University", related_name='...')”,但它们最终都显示相同的值abbrev- 来自另一个表。

我希望能够按地区等快速对联系人进行排序。

4

1 回答 1

2

显示很容易 - 定义一个返回模型或管理类相关数据的方法,然后使用list_display和/或中的方法readonly_fields

对于排序,定义admin_order_field方法的属性。虽然list_displayreadonly_fields不支持双下划线相关的字段语法,admin_order_field但确实如此。所以是这样的:

class UniversityContact(models.Model):
    # as above, plus:
    def abbrev(self):
        return self.university.abbrev
    abbrev.admin_order_field = 'university__abbrev'

short_description如果您不想要方法名称的默认选择,您也可以选择设置属性:

    abbrev.short_description = 'abbreviation'

你没有问这个,但它似乎值得知道 -list_filter还支持标准的相关字段名称语法:

    list_filter = ('university__region',)

或者,这里有一个代码片段声称可以解决它: http ://djangosnippets.org/snippets/2887/

我自己没有测试过。

于 2013-10-12T05:02:20.527 回答