字段在 Django DRF 的 OneToOne 字段上必须是唯一的
field must be unique on OneToOne field in Django DRF
我正在使用 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]
)
和serializers.py
class UserRideRatingSerializer(serializers.ModelSerializer):
class Meta:
model = UserRideRating
fields = ('id', 'user_ride', 'rating')
我想创建评级对象(如果评级对象不存在)或更新评级(如果已存在)。另外,我想使用默认的 Serializer 验证来检查验证,因此我的观点是
@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_ride
应该是唯一的,但是可以传入请求数据
如果您想跳过此唯一检查,则必须为序列化程序提供 UserRideRating
的现有实例。
由于您没有为序列化器提供实例,它认为您正在创建一个具有相同 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)
我正在使用 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]
)
和serializers.py
class UserRideRatingSerializer(serializers.ModelSerializer):
class Meta:
model = UserRideRating
fields = ('id', 'user_ride', 'rating')
我想创建评级对象(如果评级对象不存在)或更新评级(如果已存在)。另外,我想使用默认的 Serializer 验证来检查验证,因此我的观点是
@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_ride
应该是唯一的,但是可以传入请求数据
如果您想跳过此唯一检查,则必须为序列化程序提供 UserRideRating
的现有实例。
由于您没有为序列化器提供实例,它认为您正在创建一个具有相同 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)