#python #django #django-filter
Вопрос:
Я пытаюсь извлечь данные из модели родителей в модель ребенка, которая удовлетворяет условию. У меня есть модель продукта, а также модель обзора продукта. поэтому мне нужно извлечь записи из модели продукта, чтобы просмотреть модели с рейтингом 1.
class Product(models.Model):
name = models.CharField(max_length=250)
code = models.IntegerField(unique=True)
...
class Review(models.Model):
name = models.CharField(max_length=250)
rating = models.IntegerField(default=1)
message = models.TextField(max_length=2000)
...
вывод:- от всех моделей продуктов получите отзывы, которые имеют рейтинг 1.
например, этот запрос MySQL
SELECT * FROM product_product as product INNER JOIN product_productreviews as review ON product.id = review.product_id WHERE review.rating = 1.0
Ответ №1:
Вы можете добавить свойство (например reviews_with_rating_of_one
) в свою Product
модель, как показано ниже:
class Product(models.Model):
name = models.CharField(max_length=250)
@property
def reviews_with_rating_of_one(self):
return Review.objects.filter(product=self, rating=1)
class Review(models.Model):
rating = models.IntegerField(default=1)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
Примечание: если вы хотите просмотреть все свои продукты и получить доступ reviews_with_rating_of_one
к свойствам, то приведенное выше решение не очень эффективно, так как оно будет выполнять дополнительный запрос к базе данных для каждого продукта (для получения отзывов).
Если все, что вам нужно, — это все отзывы с rating
указанием 1
и подробной информацией о соответствующем продукте, то для вас должно сработать следующее:
Review.objects.select_related("product").filter(rating=1)
Комментарии:
1. Спасибо, что ответили. вот одна вещь, о которой я забыл упомянуть, что рейтинг 1-это пример, и он не является фиксированным значением для запроса. это может быть 1-5 с десятичным номером. а также я пытаюсь выбрать модель продукта. я пытаюсь с
Product.objects.filter(product_review__rating=1.0)
. но все отзывы поступают в модели продукта