使用django模型作为另一个模型的字段?

时间:2017-11-01 23:03:42

标签: python django models

我的任务是为假想的公寓预订应用程序创建Django模型。

我的问题是:我可以使用我已定义的模型作为另一个模型中的字段吗?

例如,我将有一个名为&#34的模型;列表"代表被列出的公寓。

class Listing(models.Model):
    address = models.IntegerField()
    owner = models.CharField(max_length=256)
    duration =  models.DurationField()
    price= models.IntegerField()

我也希望有一个" Booking"一个人预订后代表公寓的模型。它将具有与列表完全相同的信息,并添加了预订者的用户名。那么我可以让我的预订模型使用列表作为字段吗?然后为预订者的用户名添加一个额外的字段。

任何其他提示/评论都非常受欢迎,因为我是Django的初学者。

2 个答案:

答案 0 :(得分:3)

我不能100%确定你的意思将列表用作字段

但对我来说,你应该看看Django中存在的不同的内置模型关系。

在您的特定情况下,您可能希望使用One-to-One这样的关系,

class Listing(models.Model):
    address = models.IntegerField()
    owner = models.CharField(max_length=256)
    duration =  models.DurationField()
    price= models.IntegerField()

class Booking(models.Model):
    listing= models.OneToOneField(
    Listing,
    on_delete=models.CASCADE,
    )
    username = models.Charfield()

现在,如果用户一次可以预订多个公寓,您就会对这样的ForeignKey关系感兴趣,

class Listing(models.Model):
    address = models.IntegerField()
    owner = models.CharField(max_length=256)
    duration =  models.DurationField()
    price= models.IntegerField()

class Booking(models.Model):
    listing= models.ForeignKey(
    Listing,
    on_delete=models.CASCADE,
    )
    username = models.Charfield()

请注意,在两个示例中,我使用Charfield作为用户名,随意使用您需要的任何Django字段。

答案 1 :(得分:1)

作为字段的模型的概念是奇怪的。你可以做的是建立模型之间的关系,或者继承模型之间的关系。根据您的情况,您可以继承清单中的预订:

The docs on this topic.

你会有这样的事情:

class Listing(models.Model):
    address = models.IntegerField()
    owner = models.CharField(max_length=256)
    duration =  models.DurationField()
    price= models.IntegerField()

class Booking(Listing):
    #your new fields