Применить фильтр к полю с внешним ключом

Это работало -

    RoomBookings.objects.filter(HotelName__icontains=hotel.HotelName, RoomType__icontains= hotel.RoomType, 
        ArrivalDate__lt=RoomBookingsForm['DepartureDate'], DepartureDate__gt=RoomBookingsForm['ArrivalDate'])

Но затем я изменил поле HotelName в модели RoomBookings с CharField на ForiegnKey. И теперь я не могу понять, как сделать обратный поиск. Вот мои неудачные попытки -

        # queryset2 = RoomBookings.objects.filter(HotelName__HotelName__icontains=hotel.HotelName)
        # queryset2 = RoomBookings.objects.filter(HotelName__Hotel__HotelName__icontains=hotel.HotelName)
       
        # queryset2 = RoomBookings.objects.filter(HotelName__Hotel__HotelName_exact=hotel.HotelName)
        # queryset2 = RoomBookings.objects.filter(HotelName__HotelName_exact=hotel.HotelName)
        



class Hotel(models.Model):
    HotelName               = models.CharField(max_length=60, null=False)
          

    def __str__(self):
        return self.HotelName



class RoomType(models.Model):
    HotelName           = models.ForeignKey(Hotel, null=True, blank=True, on_delete=models.CASCADE)
    RoomType            = models.CharField(max_length=60, null=False, choices=Room_Type)
    

    def __str__(self):
return '{0}, {1}'.format(str(self.HotelName), self.RoomType) 





class RoomBookings(models.Model):
    User               = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE)
  
    HotelName           = models.ForeignKey(Hotel, null=True, blank=True, on_delete=models.CASCADE)
 
    RoomType            = models.CharField(max_length=60, null=False, choices=Room_Type)
     
    def __str__(self):
     
        return '{0}, {1}, {2}'.format(self.HotelName, self.ArrivalDate, self.RoomType)

Я протестировал ваш код. Ваша первая попытка в полном порядке.

queryset2 = RoomBookings.objects.filter(HotelName__HotelName__icontains=hotel.HotelName)

Но я не уверен, что идет под hotel.HotelName? Пробовали ли вы проверить его как print(f"hotel.HotelName: {hotel.HotelName}")? Может быть, там ничего нет, и вы не можете найти результаты.

Однако у меня есть несколько предложений для вас.

  1. Сохраняйте свой код чистым.

  2. Определите некоторые обратные имена отношений, например HotelName = models.ForeignKey(Hotel, related_name="hotel", null=True, blank=True, on_delete=models.CASCADE). проверьте ключевое слово related_name.

  3. попробуйте назвать поля модели не точно так же, как поле модели внешнего ключа. например. hotel = models.ForeignKey(Hotel, related_name="hotel", null=True, blank=True, on_delete=models.CASCADE)

  4. Внимательно читайте документацию Django.

Спасибо. Надеюсь, это ответ на ваш вопрос.

Вернуться на верх