Есть ли способ создать 5-звездочную рейтинговую систему, используя django restframework с моделями, которые я создал? - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь создать API, используя django RESTframework для 5-звездочной рейтинговой системы. API должен отображать список всех продуктов в домашнем URL, и для каждого продукта должна отображаться средняя оценка. При нажатии на эту ссылку должны быть зачислены все отзывы об этом конкретном продукте. Я сделал свои модели, просмотры и файл serializers.py. Уровень каталога отображается:

project_rating
├── reviews
│   ./apps.py
│   ./tests.py
│   ./views.py
│   ./admin.py
│   ./models.py
│   ./migrations
├── manage.py
├── api
│   ./apps.py
│   ./tests.py
│   ./urls.py
│   ./views.py
│   ./admin.py
│   ./models.py
│   ./migrations
│   ./serializers.py

Мои отзывы / models.py выглядят так:

class product(models.Model):
    title = models.CharField(max_length = 100)
    description = models.TextField()
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
    review = models.ForeignKey('feedback', on_delete=models.CASCADE, null=True, default = "NA")
    def __str__(self):
        return self.title

class feedback(models.Model):
    SCORE_CHOICES = zip(range(6), range(6) )    
    user = models.CharField(max_length=50, null= True, default='anonymous user')
    item = models.ForeignKey(product, on_delete=models.SET_NULL, null= True)
    rating = models.PositiveSmallIntegerField(choices=SCORE_CHOICES, blank=False)

    def __str__(self):
        return 'Rating(Item ='+ str(self.item)+', Stars ='+ str(self.rating)+')'

api / serializers.py выглядит так:

class RatingSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.feedback
        fields=(
            'id',
            'user',
            'rating',
        )

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.product
        fields=(
            'id',
            'title',
            'description',
            'review',
        )

Мои api / views.py:

class ProductList(generics.ListCreateAPIView):
    queryset= models.product.objects.all()
    serializer_class=serializers.ProductSerializer

class ReviewList(generics.ListCreateAPIView):
    queryset=models.feedback.objects.all()
    serializer_class= serializers.RatingSerializer

API / urls.py:

urlpatterns = [
    path('',views.ProductList.as_view()),
    path('<int:pk>/', views.ReviewList.as_view()),
]

Проблема, с которой я сталкиваюсь:

Q. Мне нужно добавить URL в product_list (домашняя страница), чтобы связать все отзывы об этом продукте. Как добавить такой URL и сделать так, чтобы этот URL отображал только те отзывы, которые были сделаны для этого конкретного продукта?

Я пытался найти много доступных ответов в Интернете, но не смог решить мою проблему. Если этот вопрос излишний, пожалуйста, обратитесь к ссылкам, которые точно решают мою ситуацию.

Ссылка на полный код github: https://github.com/rjsu26/5-star-rating

1 Ответ

0 голосов
/ 26 марта 2019

Вам необходимо написать собственный метод list в ProductList.

Проверьте github на то, как это выглядит по умолчанию.Затем создайте такой метод в своем классе и добавьте туда свою логику

...