Django多个实例/内联字段

时间:2016-02-22 01:55:30

标签: python django

在Django模型中,是否可以将该模型的一个字段设置为内联(具有该字段的多个实例)? 我可以通过创建一个内联模型并在那里移动那个字段来实现这一点,但我试图避免使用TabularInline或StackedInline,并将它们放在一个模型中。

我需要的例子是:

class Entity(models.Model):
    name = models.CharField(max_length=255)
    email = models.EmailField(max_length=255)

我需要能够添加“email”字段的多个实例,而无需创建新的Inline模型。

这可以使用下面的代码完成(但这就是我想避免的):

class Entity(models.Model):
    name = models.CharField(max_length=255)

和内联模型:

class EntityEmail(models.Model):
    link = models.ForeignKey(Entity)
    email = models.EmailField(max_length=255)

2 个答案:

答案 0 :(得分:2)

Django 1.9 introduced support用于PostgreSQL字段类型ArrayField,您可以将其用于字符串列表(表示电子邮件地址)。

class Entity(models.Model):
    ...
    email_addresses = ArrayField(models.EmailField(max_length=200), blank=True)

答案 1 :(得分:0)

如果有固定数量的字段,您可以改为:

class Entity(models.Model):
    name = models.CharField(max_length=255)
    email_1 = models.EmailField(max_length=255)
    email_2 = models.EmailField(max_length=255)
    ...
    email_n = models.EmailField(max_length=255)

但是如果你事先不知道字段数(或者每个Entity都不一样)那么不,你将不得不使用带有外键的单独模型返回{ {1}}。 (最后,无论如何,这几乎肯定是一个更好的设计。)