我正在利用PrimaryKeyRelatedField檢索和寫入 M2M 資料。
我的模型.py:
class Task(MP_Node):
...
linked_messages = models.ManyToManyField('workdesk.Message', blank=True, related_name='supported_tasks')
(MP_Node是 models.Model 的抽象django-treebeard)。
我的serializers.py:
class TaskSerializer(serializers.ModelSerializer):
...
linked_messages = serializers.PrimaryKeyRelatedField(many=True, required=False, allow_null=True, queryset=Message.objects.all())
class Meta:
model = Task
fields = [..., 'linked_messages']
我的api.py:
class TaskViewSet(ModelViewSet):
queryset = Task.objects.all()
serializer_class = TaskSerializer
def create(self, request):
serializer = self.get_serializer(data=request.data)
if serializer.is_valid(raise_exception=True):
print(serializer.data)
對于其他欄位,如果該欄位null=True在模型中或required=False在序列化程式中設定為,我不需要將它們包含在資料中以實體化序列化程式。但是,這些欄位似乎不是這樣作業的,而是在呼叫KeyError: 'linked_messages'時回傳。serializer.data
作為一種解決方法,我嘗試添加 setting allow_null,如檔案所示,然后手動為其提供一個空值:
request.data['linked_messages'] = None
但這回傳為 404:
"linked_messages":["This field may not be null."]
如果我將它設定為空字串:
"resources":["Expected a list of items but got type \"str\"."]
如果我將它設定為一個空串列,serializer.data再次給我一個錯誤:
`TypeError: unhashable type: 'list'`
它似乎可以讓我隨心所欲。我對這個領域有什么不了解的?
uj5u.com熱心網友回復:
使用default引數 -
linked_messages = serializers.PrimaryKeyRelatedField(
many=True,
queryset=Message.objects.all(),
default=[]
)
# print(serializer.data)
# {'linked_messages': []}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/537576.html
標籤:姜戈django-rest-框架django 序列化器
