Django DRF中OneToOne字段上的字段必须唯一

Django DRF中OneToOne字段上的字段必须唯一,django,django-models,django-rest-framework,django-serializer,Django,Django Models,Django Rest Framework,Django Serializer,我使用的是Django 2.x和DRF 我有一个模型来保存每个实体的评级 class UserRideRating(models.Model): user_ride = models.OneToOneField(UserRide, on_delete=models.CASCADE, related_name='user_ride_rating') rating = models.PositiveIntegerField( validators=[validate_

我使用的是
Django 2.x
DRF

我有一个模型来保存每个实体的评级

class UserRideRating(models.Model):
    user_ride = models.OneToOneField(UserRide, on_delete=models.CASCADE, related_name='user_ride_rating')
    rating = models.PositiveIntegerField(
        validators=[validate_rating_range]
    )
序列化程序.py

class UserRideRatingSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserRideRating
        fields = ('id', 'user_ride', 'rating')
我可以创建评级对象(如果不存在),或者更新评级(如果已经存在)。另外,我希望使用默认序列化程序验证来检查验证,因此我的视图如下

@api_view(['POST'])
def rate(request):
    serializer = UserRideRatingSerializer(data=request.data)

    if serializer.is_valid(raise_exception=True):
        # create or update data
        return Response(serializer.data)
当从邮递员传递数据时,它给出一个错误

{
    "user_ride": [
        "This field must be unique."
    ]
}

如何启用仅检查有效数据而不检查字段的唯一性?虽然
user\u ride
应该是唯一的,但它可以传入请求数据。

如果要跳过此唯一检查,必须向序列化程序提供
userriding
的现有实例

由于您没有向序列化程序提供实例,因此它正在考虑使用相同的
UserRide
id创建一个新的序列化程序

使用此代码:

@api_view(['POST'])
def rate(request):
    user_ride_id = request.data.get('user_ride')
    try:
        instance = UserRideRating.objects.get(user_ride_id=user_ride_id)
    except UserRideRating.DoesNotExist:
        instance=None
    serializer = UserRideRatingSerializer(instance, data=request.data)

    if serializer.is_valid(raise_exception=True):
        # create or update data
        return Response(serializer.data)

如果要跳过此唯一检查,则必须向序列化程序提供现有的
userriding
实例

由于您没有向序列化程序提供实例,因此它正在考虑使用相同的
UserRide
id创建一个新的序列化程序

使用此代码:

@api_view(['POST'])
def rate(request):
    user_ride_id = request.data.get('user_ride')
    try:
        instance = UserRideRating.objects.get(user_ride_id=user_ride_id)
    except UserRideRating.DoesNotExist:
        instance=None
    serializer = UserRideRatingSerializer(instance, data=request.data)

    if serializer.is_valid(raise_exception=True):
        # create or update data
        return Response(serializer.data)

您是否正在尝试关闭
user\u ride
字段的验证?否,我不想完全关闭此字段的验证,因为应该检查
required
以及有效的UUID字段。抱歉。。。。我不理解确切的要求:(UserRide模型有UUID
id
字段(主键),因此,
user\u-ride
应该是一个有效的UUID字段,并且在每个请求中都是必需的。因此,我只想跳过唯一检查,留下默认的验证检查。您是否正在尝试关闭
user\u-ride
字段的验证?不,我不想完全关闭此字段的验证,因为它应该是检查d表示
必需的
,同时也是一个有效的UUID字段。对不起……我不理解确切的要求:(UserRide模型具有UUID
id
字段(主键),因此,
user\u ride
应该是一个有效的UUID字段,并且在每个请求中都是必需的。因此,我只想跳过唯一检查,留下默认验证检查。我应该如何将其添加到CBV?中,我使用的是通用视图显示我应该将其添加到CBV?中,我使用的是通用视图