Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-坚持创建定价系统_Python_Django_Model_Business Logic - Fatal编程技术网

Python Django-坚持创建定价系统

Python Django-坚持创建定价系统,python,django,model,business-logic,Python,Django,Model,Business Logic,我正在制作一个“预订airbnb”网站 在我的公寓详细信息页面上,我有一个jqueryui日期选择器日历,用户使用它输入预订的开始和结束日期 完成后,用户提交表单,我希望刷新整个站点,刷新时显示用户较早选择的日期,包括每天的价格和总价 在我的模型中,我创建了: models.py: 等级公寓(模型.模型): title=models.CharField(最大长度=200) 地址=models.CharField(最大长度=200) 城市=型号.CharField(最大长度=100) state

我正在制作一个“预订airbnb”网站

在我的公寓详细信息页面上,我有一个jqueryui日期选择器日历,用户使用它输入预订的开始和结束日期

完成后,用户提交表单,我希望刷新整个站点,刷新时显示用户较早选择的日期,包括每天的价格和总价

在我的模型中,我创建了:

models.py:


等级公寓(模型.模型):
title=models.CharField(最大长度=200)
地址=models.CharField(最大长度=200)
城市=型号.CharField(最大长度=100)
state=models.CharField(最大长度=100)
zipcode=models.CharField(最大长度=20)
description=models.TextField(空白=True)
公寓价格=models.IntegerField()
卧室=模型。IntegerField()
浴室=型号。小数点域(最大位数=2,小数点位=1)
garage=models.IntegerField(默认值=0)
size=models.IntegerField()
photo_main=models.ImageField(上传至='photos/%Y/%m/%d/')
list_date=models.DateTimeField(默认为datetime.now,blank=True)
定义(自我):
返回自己的标题
class ApartmentImages(models.Model):
公寓=模型.ForeignKey(公寓,在相关的\u delete=“models.CASCADE”上)
image=models.ImageField(“图像”)
定义(自我):
返回self.image.url
class ApartmentPrices(models.Model):
公寓=模型.ForeignKey(公寓,在相关的\u delete=“models.CASCADE”上)
price\u start\u date=models.DateField(blank=True,null=True)
price\u end\u date=models.DateField(blank=True,null=True)
price=models.IntegerField()
定义(自我):
返回self.partment.title
班级预订(models.Model):
公寓=模型。外键(公寓,相关的_name='reservations',
on_delete=models.CASCADE,blank=True,null=True)
开始日期=models.DateField(空=真,空=真)
end_date=models.DateField(blank=True,null=True)
name=models.CharField(默认为“”,最大长度为200)
定义(自我):
返回self.name
这就是我目前的看法。我尝试过很多不同的方法,但我仍然坚持这个方法应该如何运作的逻辑

以下是我的看法:


def公寓视图(请求、公寓id):
reservation=reservation.objects.filter(公寓\uuuu pk=公寓\u id)
公寓=获取对象或404(公寓,主键=公寓id)
prices=ApartmentPrices.objects.filter(公寓\uuuuu pk=partment\uid)
上下文={}
上下文['plant']=公寓
上下文['prices']=价格
#svi datumi za cijene
价格\日期=[]
对于开始、结束、价格中的价格。值列表(“价格开始日期”、“价格结束日期”、“价格”):

当开始时,如果给定的日期对象在开始日期和结束日期之间,您可以给Appartment一个获取价格的方法。 (未经测试)

。。。
从django.db.models导入Q
等级公寓(模型.模型):
...
按日期确定的def价格(自、日期):
“”“返回日期在开始日期和结束日期之间的第一个价格
Args:
date_obj(datetime.date):您想要的价格的日期
返回:
公寓价格:找到的第一个有效价格
"""
#self.price是对self作为公寓的所有价格的反向引用
#您通过在ApartmentPrices.公寓中给出相关的_name=“price”来命名它
返回self.price.filter(
Q(价格开始日期=日期对象)和Q(价格结束日期=日期对象)
).first()
...
在视图中,您应该能够执行以下操作:

。。。
def公寓视图(请求、公寓id):
reservation=reservation.objects.filter(公寓\uuuu pk=公寓\u id)
公寓=获取对象或404(公寓,主键=公寓id)
日期价格=公寓价格(日期时间日期(2019年10月18日))
#date\u price.price将是整数
...
进一步资料:


用于将两个查询(开始+结束)组合为一个查询。

您真的想刷新还是以前不知道AJAX?嘿,Tiago,谢谢您的回答。我真的需要刷新,我不应该使用JS/AJAX。这一切都必须在后台完成。谢谢弗兰克!你能用几句话解释一下这是怎么回事吗?我仍然是一个乞丐,这是我在模型上的第一个方法,lolI也得到:“QueryDict”对象在我尝试制作公寓时没有属性“price”。price_by_date(request.POST,end_date)是的,我知道了,哈哈。谢谢但是如果使用“公寓.价格按日期(公寓,结束日期)”我会得到:'ReverseManyToneDescriptor'对象没有属性'get',当我这样做时,我从查询中得到的只是公寓标题,在这种情况下,“西大街28号”不,这应该是个问题。唯一的问题是,调用了由价格按日期返回的ApartmentPrices对象”28 West St“现在,但它是一个对象,请使用它;-)或者您希望仅将价格作为整数?那么您只需要从您的对象中访问属性‘price’。在我的示例中,date_price.price。