【问题标题】:How to make models in django which have different models inside them as different table columns?如何在 django 中制作具有不同模型的模型作为不同的表列?
【发布时间】:2019-03-26 22:09:06
【问题描述】:

我是 django 开发的新手,并且被困在我正在从事的项目中。我一直在尝试创建一个网站,让多人可以在指定的预订期内为他们的房子租用不同的家具物品,这不能与其他人重叠。因此,我想,我会创建一个具有多对多关系的家具模型和预订期,如下所示

class booking_period(models.Model):
    booking_period_start = models.DateField(auto_now=False)
    booking_period_end = models.DateField(auto_now=False)
    booking_person_name = models.CharField(max_length=200)


class Furniture(models.Model):
    furniture_type = models.CharField(max_length=200)
    furniture_owner_name = models.CharField(max_length=200)
    furniture_booking = models.ManyToManyField(booking_period)

    def __str__(self):
        return self.furniture_type

然后在 django admin 中,我添加了家具类,以便我们可以自己添加模型。挑战在于特定家具可以有多个预订期,并且它们不能相互重叠。因此,一件家具可以没有预订期,而其他家具可以有 5 或 10 个预订期。此外,不同的家具物品的预订期限也可能略有不同。因此,如果我们在 table booking period 中添加所有可能的预订期,最终会占用大量空间。如果有人能告诉我这样做的最佳方法,那将非常有帮助,这样我就可以通过 django 管理面板添加家具。

【问题讨论】:

    标签: django sqlite django-models django-admin


    【解决方案1】:

    您必须创建一个新表来连接它们。例如:

    class Person(models.Model):
        person_name = models.CharField(max_length=200)
    
        def __str__(self):
            return self.person_name 
    
    class Furniture(models.Model):
        furniture_type = models.CharField(max_length=200)
        furniture_owner_name = models.CharField(max_length=200)
    
        def __str__(self):
            return self.furniture_type
    
    class Reservation(models.Model):
        person = models.ForeignKey(Person, on_delete=models.SET_NULL)
        furniture= models.ForeignKey(Furnituure, on_delete=models.SET_NULL)
        period_start = models.DateField(auto_now_add=True)
        period_end = models.DateField(null=True) 
    

    您必须手动处理最后一个字段或以表格形式发送。 period_start 字段也可以以表单形式发送。

    【讨论】:

    • 好的。那么,当我在 admin.py 文件中导入模型时,我应该导入预订类吧?
    • 没错。我建议您使用界面执行此操作,单击要预订的人,然后选择时间段....
    猜你喜欢
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2010-11-23
    • 2020-01-30
    • 1970-01-01
    • 2018-06-16
    相关资源
    最近更新 更多