我有这样的情况,你有一个自定义嵌套序列化器关系与唯一字段.样例:
class GenreSerializer(serializers.ModelSerializer):
class Meta:
fields = ('name',) #This field is unique
model = Genre
class BookSerializer(serializers.ModelSerializer):
genre = GenreSerializer()
class Meta:
model = Book
fields = ('name', 'genre')
def create(self, validated_data):
genre = validated_data.pop('genre')
genre = Genre.objects.get(**genre)
return Book.objects.create(genre=genre, **validated_data)
Run Code Online (Sandbox Code Playgroud)
问题:当我尝试保存json对象如{"name":"The Prince","genre":{"name":"History"}} DRF尝试验证流派对象的唯一约束以及"History" exists抛出一个例外,因为一个名为"History"的类型必须是唯一的,这是真的,但我只是试图关联对象而不是一起创建.
非常感谢!!
我有2种视图-其中一种使用create,另一种使用RetrieveUpdateDestroyAPIView。两者都使用相同的Serializer类。我仅在创建新帖子时才需要标题验证,而在更新帖子时则不需要。
我使用“ PUT”请求更新某些帖子时出现标题验证错误。
我怎样才能解决这个问题?
class StoreApiView(mixins.CreateModelMixin, generics.ListAPIView):
lookup_field = 'pk'
serializer_class = ProductSerializer
def get_queryset(self):
qs = Product.objects.all()
query = self.request.GET.get('q')
if query is not None:
qs = qs.filter(
Q(title__icontains=query) |
Q(description__icontains=query)
).distinct()
return qs
def perform_create(self, serializer):
serializer.save(author=self.request.user)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
class StoreRucView(generics.RetrieveUpdateDestroyAPIView):
lookup_field = 'pk'
serializer_class = ProductSerializer
permission_classes = [IsOwnerOrReadOnly]
def get_queryset(self):
return Product.objects.all()
Run Code Online (Sandbox Code Playgroud)
这是序列化器类的完整代码:
class ProductSerializer(ModelSerializer):
product_ratings = ProductRatingSerializer(many=True,read_only=True)
product_badges_set = ProductBadgesSerializer(many=True,read_only=True)
author = serializers.SerializerMethodField()
category …Run Code Online (Sandbox Code Playgroud)