Django-建立预订系统

时间:2019-10-09 10:37:20

标签: python django view model

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

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

我是Django的新手,并且需要一些指针才能开始执行此任务。

我有一个Apartment模型,其中包含所有我要用来通过模板打印所有内容的Apartments信息。

我正在使用提供的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

非常感谢您!

1 个答案:

答案 0 :(得分:0)

您对创建Reservation对象的假设将是正确的。 您需要将这些预订链接到相关公寓。 Django通过其ForeignKey和ManyToManyField支持这种关系。

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

在您的情况下,一个公寓可以有多个预订,这意味着您需要在预订中有一个字段指向一个公寓,这可以使用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>)

过滤特定日期