Django - 在 ForeignKey 中使用 ForeignKey 进行列表过滤

Django - List Filtering using a ForeignKey within a ForeignKey

我可以使用“住房”外键从“住房”过滤预订列表

但我需要根据使用“HousingType”外键的h_type来完成

我不确定这里的术语是否正确,但我想我正在尝试在 ForeignKey 中使用 ForeignKey,但不确定如何在视图中完成此操作。

models.py

class HousingType(models.Model):

    name = models.CharField(max_length=254)
    friendly_name = models.CharField(max_length=254, null=True, blank=True)

class Housing(models.Model):

    h_type = models.ForeignKey('HousingType', null=True, blank=True, on_delete=models.SET_NULL)

class Booking(models.Model):

    housing = models.ForeignKey('Housing', null=True, blank=True, on_delete=models.SET_NULL)

views.py

def view_bookings(request):

    housing = Housing.objects.all()
    bookings = Booking.objects.all()

    if request.GET:
        if 'housing_type' in request.GET:
            h_types = request.GET['housing_type'].split(',')
            bookings = bookings.filter(housing_type__name__in=h_types)
            h_types = HousingType.objects.filter(name__in=h_types)

html模板

<a href="{% url 'view_bookings' %}?housing_type=apartments">Apartments</a>

您可以 .filter(…) [Django-doc] 使用:

Booking.objects.filter(<b>housing__h_type__name__in=h_types</b>)

或者如果您使用 friendly_name:

Booking.objects.filter(<b>housing__h_type__friendly_name__in=h_types</b>)