python - Django - 将模型相互关联

标签 python django foreign-keys

作为任务的一部分,我创建了一个“公寓列表”网站。我设法完成了那件事,但现在我需要为它制作一个“预订系统”。 基本思想是登录用户可以从列出的公寓中选择一个公寓,选择“开始日期”和“结束日期”(如果公寓尚未预订)并预订公寓。 我是 Django 的新手,需要一些指导才能开始执行此任务。 我有一个公寓模型,其中包含我用来使用模板打印所有内容的所有公寓信息。

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

我创建了这个 View 和模型来进行预订:

查看:

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 - Django - 将模型相互关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58320681/

相关文章:

python - 为什么我得到 'ValueError: too many values to unpack' ?

Python 2.7 Cx_Freeze : ImportError: No module named __startup__

Python tkinter 菜单+变量

django - 当我在 Django 项目中使用时,为什么 HttpResponseRedirect.set_cookie 不起作用?

Python Flask,如何设置内容类型

django - 我可以让 Django 管理员反射(reflect)模型的层次结构吗?

python - 添加保存的 FK 时 NoneType 对象不可调用

python - Django 和外键

php - MySQL 无法使用 FK 约束进行 INSERT

MYSQL SELECT 在具有 NULL 值的 FK 字段上不返回任何内容