【发布时间】:2016-02-09 03:32:35
【问题描述】:
我正在尝试为我的应用程序创建一个 REST Api。
应用目录中的urls.py如下所示:
urlpatterns = [
url(
r'^professors/(?P<pk>[0-9]+)/reviews/$',
views.ProfessorReviewList.as_view(),
name = 'user-review-list',
)
]
serializers.py
class ProfessorSerializer(serializers.HyperlinkedModelSerializer):
reviews = serializers.HyperlinkedIdentityField(view_name='professor-review-list')
class Meta:
model = Professor
fields = (
'url', 'name', 'name_code', 'university',
'department', 'total_rating_points',
'number_of_reviews', 'rating', 'reviews',
)
class ReviewSerializer(serializers.HyperlinkedModelSerializer):
author = serializers.ReadOnlyField(source='author.username')
class Meta:
model = Review
fields = (
'url', 'author', 'professor',
'created', 'updated', 'rating', 'text'
)
最后,我的 views.py 看起来像这样:
class ProfessorReviewList(generics.ListCreateAPIView):
queryset = Review.objects.all()
serializer_class = ReviewSerializer
def get_queryset(self):
queryset = super(ProfessorReviewList, self).get_queryset()
return queryset.filter(professor__pk=self.kwargs.get('pk'))
permission_classes = (permissions.IsAuthenticatedOrReadOnly,
IsAuthorOrReadOnly,)
def perform_create(self, serializer):
# The request user is set as author automatically.
serializer.save(author=self.request.user)
当我访问该 URL 时,我要做的是获取一位特定教授的所有评论列表。如果用户愿意,我还希望允许用户在此端点添加新评论。一切都很好,但我想要一个用户在创建评论时不必选择教授的系统。
假设我去 /professors/1/reviews/,获得了 pk=1 教授的所有评论列表。现在,如果用户添加新评论,教授会自动设置为 pk=1 的教授。用户无法选择。在 /professors/2/reviews/ 中,review 的教授字段自动设置为 pk=2 的教授,以此类推。
我该怎么做?感谢您的帮助。
【问题讨论】:
标签: python django django-rest-framework