【发布时间】:2019-07-06 12:19:40
【问题描述】:
我想通过 django-rest-api UI 制作一个对象。 这个对象有一个多对多字段,上面保存着其他对象。
即使该字段为空白,参数设置为 True,我也会收到“需要此字段”的响应。
class Post(models.Model):
title = models.CharField(max_length=100)
slug = models.CharField(max_length=200, null=True)
description = models.CharField(max_length=200, null=True)
content = HTMLField('Content', null=True)
black_listed = models.ManyToManyField('profile_app.Profile', related_name='black_listed_posts', blank=True)
score = models.PositiveIntegerField(null=True, default=0, validators=[MaxValueValidator(100)])
serializers.py:
class PostSerializer(serializers.HyperlinkedModelSerializer):
black_listed = ProfileSerializer(many=True)
read_only = ('id',)
def create(self, validated_data):
self.black_listed = []
class Meta:
model = Post
fields = ('id', 'title', 'slug', 'description',
'content',
'black_listed', 'score')
views.py:
class PostViewSet(ModelViewSet):
serializer_class = PostSerializer
queryset = Post.objects.all()
lookup_field = "slug"
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.black_listed = []
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
如您所见,我尝试在序列化程序和视图集上覆盖 create() 方法,但这没有用,并且仍然告诉我需要 black_list 字段。
我期望如果数据库中不需要该字段,那么序列化程序可以在创建时将其设置为 None
我在这里错过了什么?
编辑:
ProfileSerializer:
class ProfileSerializer(serializers.ModelSerializer):
interests = InterestSerializer(read_only=True, many=True)
class Meta:
model = Profile
fields = ('slug', 'user_id', 'image', 'role', 'work_at', 'interests')
【问题讨论】:
-
你能显示
ProfileSerializer吗? -
在编辑中添加..
-
尝试在
black_listed = ProfileSerializer(many=True, required=False, allow_null=True)上添加required=False和allow_null=True -
太棒了!你可以把它放在一个答案中让其他人能够看到 - 我会除了它
标签: django django-rest-framework