Django 许多字段/序列化程序问题上的DRF修补程序
更新:序列化程序上初始\u数据和验证的\u数据之间的差异 “弱点”消失了 既然漏洞字段是M2M字段,为什么会有这样的差异Django 许多字段/序列化程序问题上的DRF修补程序,django,django-rest-framework,Django,Django Rest Framework,更新:序列化程序上初始\u数据和验证的\u数据之间的差异 “弱点”消失了 既然漏洞字段是M2M字段,为什么会有这样的差异 >>> from api.serializers import AssetSerializer >>> serializer = AssetSerializer(data={"key": "A999","id": "A999","name":
>>> from api.serializers import AssetSerializer
>>> serializer = AssetSerializer(data={"key": "A999","id": "A999","name": "Asset 999","weight": 10,"vulnerabilities": ["V001"]})
>>> serializer.is_valid()
True
>>> serializer.initial_data
{'key': 'A999', 'id': 'A999', 'name': 'Asset 999', 'weight': 10, 'vulnerabilities': ['V001']}
>>> serializer.validated_data
OrderedDict([('id', 'A999'), ('name', 'Asset 999'), ('weight', 10)])
我想在我的模型中添加一个使用DRF的M2M条目。 我找到了这篇文章 我遇到的问题是,当我对资产使用“补丁”时,什么都不会出现 型号:
class Asset(models.Model):
[...]
vulnerabilities = models.ManyToManyField("Vulnerability",verbose_name="vulnerability",blank=True,)
class Vulnerability(models.Model):
id = models.CharField(max_length=25, primary_key=True)
name = models.CharField(max_length=255, blank=True, null=True)
level = models.PositiveSmallIntegerField()
序列化程序:
class VulnerabilitySerializer(serializers.ModelSerializer):
key = serializers.CharField(source='id', read_only=True)
controls = ControlSerializer(read_only=True, many=True)
class Meta:
model = models.Vulnerability
fields = (
'key',
'id',
'name',
'level',
'controls',
)
class AssetSerializer(serializers.ModelSerializer):
key = serializers.CharField(source='id', read_only=True)
class Meta:
model = models.Asset
fields = (
'key',
'id',
'name',
'weight',
'vulnerabilities',
)
depth = 3
当我得到/api/asset/xxx
{
"key": "xxx",
"id": "xxx",
"name": "aaaaaaaaaaaa",
"weight": 3,
"vulnerabilities": [
{
"id": "V004",
"name": "xazeaze",
"level": 3,
"controls": []
}
]
}
因此,我尝试发布一个资产,它可以工作:
{
"key": "A099",
"id": "A099",
"name": "Asset 999",
"weight": 10,
"vulnerabilities": [] <---- empty
}
它返回一个空值:
{
"key": "A099",
"id": "A099",
"name": "Asset 999",
"weight": 10,
"vulnerabilities": [] <--- still empty
}
{
“密钥”:“A099”,
“id”:“A099”,
“名称”:“资产999”,
“重量”:10,
“漏洞”:[]
{
"key": "A099",
"id": "A099",
"name": "Asset 999",
"weight": 10,
"vulnerabilities": [] <--- still empty
}