python - Django - 将模型相互关联
问题描述
作为任务的一部分,我创建了一个“公寓列表”网站。我设法做到了,但现在我需要为它建立一个“预订系统”。基本思想是登录用户可以从列出的公寓中选择一个公寓,选择“开始日期”和“结束日期”(如果该公寓尚未预订)并预订该公寓。我是一个完全的 Django 新手,需要一些指示才能从某个地方开始执行此任务。我有一个 Apartment 模型,其中包含我用来使用模板打印所有内容的所有 Apartments 信息。
我正在使用提供的 django 用户模型来注册/登录。我正在使用 Django 2.1.8
我创建了这个视图和模型来进行预订:
看法:
def apartment_view(request, apartment_id):
apartment = get_object_or_404(Apartment, pk=apartment_id)
context = {'apartment': apartment, }
context_instance = RequestContext(request)
form = ReservationForm()
if request.method == 'GET':
form = ReservationForm()
elif request.method == 'POST':
form = ReservationForm(request.POST)
if form.is_valid:
form.save()
# to go back to check that the info has changed
return HttpResponseRedirect('/booking/')
args = {}
args['form'] = form
return render(request, 'booking/index.html', args)
楷模:
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
class Reservation(models.Model):
apartment = models.ForeignKey(Apartment, related_name='reservations',
on_delete=models.CASCADE, blank=True, null=True)
start_date = models.DateField(blank=True, null=True)
end_date = models.DateField(blank=True, null=True)
def __str__(self):
return "Reservation"
我的网址:
app_name = "booking"
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
path('<int:apartment_id>/', views.apartment_view, name='apartment'),
path('apartments/', views.ApartmentsView.as_view(), name='apartments'),
# path('reservation/', views.CreateReservationView.as_view(), name='reservation'),
path('search/', include('haystack.urls',)),
]
所以有了这个我可以创建一个预订,但我的问题是预订不会自动“连接”到实际的公寓列表,我希望它与它相关联。
如果我进入 django admin 我可以看到已创建的预订,但我必须手动将公寓添加到其中。
我怎么能这样做,所以它是自动的?
谢谢 !!
解决方案
您只需在预订时附上它,如下所示。
if form.is_valid():
reservation = form.save(commit=False)
reservation.apartment = apartment
reservetion.save()
# to go back to check that the info has changed
推荐阅读
- python - 制作一个计算每个列表中负数的python代码?
- python - Unable to find elements after switching to iframe in Selenium python
- ios - Dependency caching on Jenkins similar to CircleCI
- html - Why does refreshing an anchor link / trying to go directly to an anchor link go to the top of the page?
- javascript - Can't bind multiple parameters to the request's content
- php - 删除 php 中的 html、head 和 body 标签
- php - file_get_contents 和连接被拒绝错误 - MapQuest
- tensorflow-lite - 中止(核心转储):检查失败:“image_tensor”的实际和最终数据类型不匹配(data_type=uint8,final_data_type=float)
- php - 如何在PHP中获取唯一数组并对数组的值求和?
- angular - 错误:“您在预期流的位置提供了‘未定义’。您可以提供 Observable、Promise、Array 或 Iterable。” 在我的身份验证拦截器中