如果存在则更新或在Django Rest中创建模型

时间:2016-09-03 08:39:39

标签: django django-rest-framework

我得到了这个模型:

class Like(models.Model):
    id = models.AutoField(primary_key=True)
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    post = models.ForeignKey('posts.Post', blank=True, null=True)
    RATING_CONVERSION = (
    (1, '+'),
    (0, '0'),
    (-1, '-'),
    )
    userRating = models.SmallIntegerField(choices=RATING_CONVERSION)

    def __int__(self):
        return self.id

如果存在帖子ID和用户ID,我需要更新评级。

我试着去做。 序列化器:

class LikeSerializer(serializers.ModelSerializer):
user = serializers.PrimaryKeyRelatedField(queryset=ExtUser.objects.all(), required=False, allow_null=True,default=None)

    class Meta:
        model = Like
        field = ('user', 'post')

        validators = [
            UniqueTogetherValidator(
                queryset=Like.objects.all(),
                fields=('user', 'post')
            )
        ]



    def validate_user(self, value):
        return self.context['request'].user

    def create(self, validated_data):
        return Like.objects.create(**validated_data)

和ViewSet

class LikeViewSet(viewsets.ModelViewSet):
    queryset = Like.objects.all()
    serializer_class = LikeSerializer

    @detail_route(methods=['post', 'get'])
    def get_object(self):
        if self.request.method == 'POST':
            like = Like.objects.get(user=self.context['request'].user, post = self.context['request'].post)
            if like:
                return like
            else:
                return Like(id=self.kwargs.get('pk'))
        else:
            return super(LikeViewSet, self).get_object()

我发现了很多关于如何在Url中使用pk创建或更新的信息,但我在JSON中有参数

此方法不起作用 - 而不是更新评级,它会创建新的模型对象

0 个答案:

没有答案