Django Rest Frameworkのtutorialにあるコードに投票機能を追加しようとしています。スニペットモデルの上に、私は投票モデルを追加しました:私のシリアライザでDjango Rest Frameworkの読み取り専用フィールドを検証する方法
class Vote(models.Model):
created = models.DateTimeField(auto_now_add=True)
voter = models.ForeignKey(User, on_delete=models.CASCADE)
snippet = models.ForeignKey(Snippet, related_name='votes', on_delete=models.CASCADE)
class Meta:
ordering = ('created',)
を、私は、ユーザーが複数回投票することができないという事実を検証しようとしているし、彼自身のスニペットに投票することはできません。
投票者フィールドは読み取り専用でなければなりません。問題は、ReadOnlyFieldがデータ構造で利用できないことです。読み取り専用フィールドでどのように検証できますか?
編集:ここに私のビューがすでにself.context['request'].user
で現在のユーザーへのアクセス権を持っているあなたのシリアライザで
class VoteViewSet(viewsets.ModelViewSet):
"""
This viewset automatically provides `list`, `create`, `retrieve`,
`update` and `destroy` actions.
"""
queryset = Vote.objects.all()
serializer_class = VoteSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,
IsOwnerOrReadOnly,)
def perform_create(self, serializer):
serializer.save(voter=self.request.user)
Can yあなたの意見が含まれていますか? – dkarchmer
もちろん、自分の投稿を編集して自分のビューを追加しました。ご協力いただきありがとうございます。 – Patrick
代わりに、perform_createメソッドからこのチェックを行う方法があります。 – dkarchmer