【发布时间】:2016-03-30 19:09:48
【问题描述】:
我有这个代码用于评价课程,用户和课程应该从请求授权和 URL 自动添加:
#views.py
class RatingViewSet(
mixins.ListModelMixin,
mixins.CreateModelMixin,
viewsets.GenericViewSet
):
permission_classes = [permissions.IsAuthenticated]
serializer_class = RatingSerializer
def perform_create(self, serializer):
lessonInstance = Lesson.objects.get(id = self.kwargs['lessonID'])
serializer.save(user=self.request.user, lesson = lessonInstance)
def get_queryset(self):
lessonID = self.kwargs['lessonID']
return Rating.objects.filter(user=self.request.user, lesson=lessonID)
#serializers.py
class RatingSerializer(serializers.ModelSerializer):
class Meta:
model = Rating
fields = ('id', 'lesson','user', 'difficulty')
read_only_fields = ('id', 'user','lesson')
#models.py
class Rating(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
lesson = models.ForeignKey('lessons.Lesson')
difficulty = models.IntegerField()
class meta:
unique_together('user','lesson')
我希望每个用户/课程最多获得 1 个评分,因此 unique_together('user','lesson')。但是有一个问题:只要该约束在代码中,没有user 或lesson 字段的请求就会被拒绝并出现field required 错误,即使它们是read_only。
(如果我使用unique_together('user','lesson') 迁移,则删除该行它可以工作,但一旦出现我就会收到错误。)
我想保留那段代码,以免在以后的迁移中意外删除unique_together 约束。
【问题讨论】:
标签: python django django-rest-framework