Django primarykey序列化程序“此字段可能不为null”,而allow_null = True

问题描述 投票:0回答:2

我一直在努力解决这个问题。

我不确定我错过了什么。

如果您有任何建议,请告诉我.. !!

models.朋友:

co_manager = models.ManyToManyField(BookRunner, blank=True, null=True, related_name="deal_co_manager")

views.朋友:

 class DealAdminViewSet(viewsets.ModelViewSet):
      queryset = Deal.objects.all()
      serializer_class = CreateDealSerializer

      def create(self, request, format=None):
          data = ...all things data here.
          serializer = CreateDealSerializer(data=deal)
          print serializer
          co_manager_array = []
          if serializer.is_valid():
              serializer.save()
              return Response(status=status.HTTP_201_CREATED)
          else:
              return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

serialize人.朋友:

class CreateDealSerializer(serializers.Serializer):
    co_manager = serializers.PrimaryKeyRelatedField(allow_null=True, many=True, queryset=BookRunner.objects.all(), required=False)
python django django-rest-framework serializer
2个回答
0
投票

我建议编辑你的观点,更像这样,

class DealAdminViewSet(viewsets.ModelViewSet):
  queryset = Deal.objects.all()
  serializer_class = CreateDealSerializer

  def create(self, request, *args, **kwargs):
      serializer = self.get_serializer(data=request.data)
      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)

没有展示你的模型,任何人都可以提供的帮助非常有限。如果有任何问题,请告诉我。

另外,你的序列化器,

class CreateDealSerializer(serializers.Serializer):
    co_manager = serializers.PrimaryKeyRelatedField(allow_null=True, many=True, queryset=BookRunner.objects.all())

错误是触发因为,在您的模型中,字段co_manager未定义为null=True。如果您想将上述字段保存为null,请更改models.py,

co_manager = models.ForeignKey(Target_table_name, null=True, blank=True)

存储空值时,不会引发错误。


0
投票

如果序列化器设置为many = True,则允许发送空列表,allow_null = True

来自序列化器:

many_field = serializers.PrimaryKeyRelatedField(queryset=qs, read_only=False, many=True, allow_null=True)

class Meta:
    model = ModelName
    fields = (
        'many_field ',
         ...)
    extra_kwargs = {
        'many_field': {'required': False},
    }

并在请求数据中:

 data = {'NOT_many_field': None,
 'many_field': []}
© www.soinside.com 2019 - 2024. All rights reserved.