【问题标题】:Django - Making a Reservation systemDjango - 制作预订系统
【发布时间】:2020-02-06 16:18:44
【问题描述】:

作为任务的一部分,我创建了一个“公寓列表”网站。 我设法完成了,但现在我需要为它建立一个“预订系统”。

基本思路是登录用户可以从列出的公寓中选择一个公寓,选择“开始日期”和“结束日期”(如果该公寓尚未预订)并预订该公寓。

我是一个 Django 新手,需要一些指导才能从某个地方开始执行此任务。

我有一个公寓模型,其中包含所有公寓信息,我使用模板打印所有内容。

我正在使用提供的 django 用户模型来注册/登录。

我需要什么样的模型来进行预订,如何连接所有东西? 我尝试制作预订模型,但不知道下一步该去哪里。

我不是要求你为我解决这个问题,我是要求有人向我解释(如果可能的话)我怎么能继续靠我自己来解决这个问题。

这是我的公寓模型:

class Apartment(models.Model):
    title = models.CharField(max_length=200)
    address = models.CharField(max_length=200)
    city = models.CharField(max_length=100)
    state = models.CharField(max_length=100)
    zipcode = models.CharField(max_length=20)
    description = models.TextField(blank=True)
    price = models.IntegerField()
    bedrooms = models.IntegerField()
    bathrooms = models.DecimalField(max_digits=2, decimal_places=1)
    garage = models.IntegerField(default=0)
    size = models.IntegerField()
    photo_main = models.ImageField(upload_to='photos/%Y/%m/%d/')
    photo_1 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
    photo_2 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
    photo_3 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
    photo_4 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
    in_rent = models.BooleanField(default=False)
    list_date = models.DateTimeField(default=datetime.now, blank=True)

    def __str__(self):
        return self.title

非常感谢!

【问题讨论】:

  • 您可以创建一个Reservation 模型,该模型将存储date_startdate_end、其他一些属性,例如用户的人数和外键以及Apartment。创建新预订时,请检查日期是否可用。

标签: python django view model


【解决方案1】:

您制作 Reservation 对象的假设是正确的。 您需要将这些预订与相关公寓相关联。 Django 通过它们的 ForeignKey 和 ManyToManyField 支持这些类型的关系。

这些字段支持one-to-one, one-to-many, and many-to-many relationships的链接。

在您的情况下,一个 Apartment 可以有多个 Reservations,这意味着您需要在 Reservation 中有一个字段指向一个 Apartment,这可以使用 ForeignKey 来完成

您的模型应该如下所示:

Reservation(models.Model)

    apartment = models.ForeignKey(to=Apartment, related_name='reservations', 
        on_delete=models.Cascade)

    start_date = models.DateField()
    end_date = models.DateField()

要检索公寓的所有预订,您只需使用 apartment.reservations,因为我们在 ForeignKey 字段中定义了 related_name

您甚至可以通过Reservations.objects.filter(apartment=apartment, start_date__gte=<your_start_date>, end_date__gte<your_end_date>) 过滤特定日期

【讨论】:

    猜你喜欢
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2012-05-05
    • 2018-08-18
    • 2020-07-29
    • 1970-01-01
    相关资源
    最近更新 更多