DRF序列化器包含一个组和清单字段,它们是多对多和外键。默认DRF HTML表单中缺少它,但在GET视图中可用。当前,深度字段在序列化器中启用。如果我要删除深度,则外键可以使用默认的HTML格式,但仍缺少groupman2many组。我需要POST呼叫或DRF HTML表单中的两个字段。
我是否必须编写一些创建方法,但是我不想为外键创建新记录,并且many2many只想利用现有字段。
我的序列化器类。
class MainHostSerializer(serializers.ModelSerializer):
class Meta:
model = MainHost
fields = (
'host_id',
'host_name',
'inventory',
'group'
)
# depth = 2
默认DRF HTML表单的原始视图
{
"host_id": null,
"host_name": ""
}
模型类
class MainHost(models.Model):
host_id = models.IntegerField(verbose_name='HOST ID', primary_key=True)
host_name = models.CharField(verbose_name='HOST NAME', max_length=512)
inventory = models.ForeignKey(related_name='inv_ins', on_delete=models.SET_NULL, to='hosts.MainInventory', blank=True, null=True)
group = models.ManyToManyField(MainGroup, related_name='hostgroups', through ='HostGroup')
答案 0 :(得分:0)
MainHost序列化程序的创建方法
def create(self, validated_data):
inv_data = validated_data.pop('inventory')
inv_res = MainInventory.objects.create(**inv_data)
group_data = validated_data.pop('group')
host_data = MainHost.objects.create(inventory = inv_res, **validated_data)
for g_data in group_data:
inv_data = g_data.pop('inv_id')
inv = MainInventory.objects.create(**inv_data)
group_res = MainGroup.objects.create(inv_id = inv, **g_data)
print(validated_data)
HostGroup.objects.create(host = host_data, group = group_res)
答案 1 :(得分:0)
这是示例JSON
.lock().unwrap().pop()