django admin:如何编写可重用的类,例如管理员的地址

时间:2013-03-14 11:23:27

标签: django django-admin

说,我们正在创建一个网站,客户(Customer)可以来评论出版社(PublishingHouse)。我们需要存储CustomerPublishingHouse的地址,因此我们创建一个Address类,如下所示:

class Address(models.Model):
  line1 = models.CharField(max_length=50)
  line2 = models.CharField(max_length=50)
  city = models.CharField(max_length=50)
  postal_code = models.CharField(max_length=6)
  country = models.CharField(max_length=50)

然后我们的CustomerPublishingHouse类引用了它,如下所示:

class Customer(models.Model):
  name = models.CharField(max_length=50)
  address = models.ForeignKey(Address)

class PublishingHouse(models.Model):
  name = models.CharField(max_length=50)
  website = models.URLField(max_length=4096)
  address = models.ForeignKey(Address)

这适用于我在django shell中的交互式会话,但是当我为这些模型激活管理员时,是否有一种方法可以使Address中的字段显示在“添加客户”或“添加发布”页面上?

我正在使用django 1.5

1 个答案:

答案 0 :(得分:0)

你可能正在寻找generic inlines。根据记录的example Address,您的Image型号

根据您的评论,您可以使用类继承:

class Address(models.Model):
    # fields

class DynamicAddress(Address):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey("content_type", "object_id")
    # etc

此外,您可以使用通用内联管理类中的max_num属性限制(通用)内联。