Как проверить, существует ли такое поле для продукта (модели продукта)?
Я начинающий в django....... У меня есть такая модель
class Product(models.Model):
title = models.CharField(max_length=50)
description = models.TextField(blank=True)
owner = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
slug = models.SlugField(unique=True) # "штрих код"
price = models.DecimalField(max_digits=8,
decimal_places=2, )
creation_date = models.DateTimeField(auto_now_add=True)
last_update_time = models.DateTimeField(auto_now=True)
image1 = models.ImageField(blank=True)
mark = models.CharField(max_length=50, blank=True)
class Review(models.Model):
review = models.TextField(max_length=500)
author = models.ForeignKey(User, on_delete=models.CASCADE)
product_connected = models.ForeignKey(Product, on_delete=models.CASCADE,
related_name="reviews")
creation_date = models.DateTimeField(auto_now_add=True)
last_update_time = models.DateTimeField(auto_now=True)
rating = models.IntegerField(default=0, validators=[MinValueValidator(0), MaxValueValidator(5)])
и вот такие взгляды
class ProductDetailView(LoginRequiredMixin, DetailView):
model = Product
template_name = "product.html"
context_object_name = "product"
@staticmethod
def round_custom(num, step=0.5):
return round(num / step) * step
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
data["pictures_list"] = Photo.objects.filter(product_connected=self.get_object())
data["comments"] = Review.objects.filter(product_connected=self.get_object())
if self.request.user.is_authenticated:
data['comment_form'] = CommentForm(instance=self.request.user)
average_rt=Review.objects.filter(
product_connected=self.get_object()).aggregate(Avg('rating'))
avr_intermediate = str(average_rt.get("rating__avg")).replace(",", ".")
data["average_rating"] = self.round_custom(float(avr_intermediate))
return data
Вся эта схема с average нужна для отображения рейтинга на сайте (rating), проблема в том, что продукт создается в модели продукта, а класс review создается только тогда, когда пользователь пишет отзыв. Так вот, как мне проверить, что для этого продукта есть Review, и если есть, то вернуть return data["average_rating"] через мою схему, а если нет, то просто return 0 в data average. Потому что без существующего поля, None приходит в мой код и выдает ошибку, а если есть хотя бы один Отзыв, то все работает как надо, тогда рейтинг можно передать в Product, но это для меня не вариант. Спасибо за любую помощь
Проверка размера набора запросов
if len(Review.objects.filter(product_connected=self.get_object()))>0:
#do average code
else:
data["average_rating"]=0