django admin 中的外键日期范围过滤

问题描述 投票:0回答:1

对于使用 django admin 的酒店预订系统,我想过滤给定日期范围内可用的房间,模型如下


class Room(models.Model):
    id = models.AutoField(primary_key=True)
    hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE)


class Booking(models.Model):
    id = models.AutoField(primary_key=True)
    start_date = models.DateField(verbose_name=_("Start date"))
    end_date = models.DateField(verbose_name=_("End date"))
    room = models.ForeignKey(Room, on_delete=models.CASCADE)

如何在管理员中过滤房间,以便选择日期范围并仅返回在所选范围内没有预订的房间?

非常感谢

django django-admin
1个回答
0
投票

在我使用的管理面板中按日期创建选择过滤器 以下库:django-admin-rangefilter

库安装后。我在管理面板中注册 Room 模型,并使用

DateRangeFilterBuilder()
在 list_filter 中指示(小写的辅助模型的名称及其用于过滤的字段)。

管理员.py

from .models import *   
from django.contrib import admin
from rangefilter.filters import DateRangeFilterBuilder

class Room_Admin(admin.ModelAdmin):
    list_display = ('id', 'hotel')
    list_filter = (('booking__start_date', DateRangeFilterBuilder()),
                   ('booking__end_date', DateRangeFilterBuilder()))

admin.site.register(Room, Room_Admin)

在管理面板中,我选择日期范围:开始日期和结束日期,结果我得到按预订日期过滤的房间。

© www.soinside.com 2019 - 2024. All rights reserved.