Django - Фильтрация списков с использованием внешнего ключа внутри внешнего ключа
Я могу отфильтровать список бронирований из "жилья", используя ForeignKey "Housing"
Но мне нужно сделать это на основе h_type, который использует ForeignKey "HousingType"
Я не уверен в правильности терминологии, но я думаю, что пытаюсь использовать 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(housing__h_type__name__in=h_types)
или если вы используете friendly_name:
Booking.objects.filter(housing__h_type__friendly_name__in=h_types)