Python 3.x DRF序列化程序名称错误:名称';XYZSerializer';未定义,仅在获取另一个序列化程序时定义
我有多个序列化程序,独立运行良好。但是,在另一个序列化程序中获取它时,它会给出NameError:未定义名称“HostGroupSerializer” 在此行hostgroup=HostGroupSerializer中获取错误(many=True,required=False) HostGroupSerializer.py,它的许多字段表序列化程序。通过父项中的字段创建Python 3.x DRF序列化程序名称错误:名称';XYZSerializer';未定义,仅在获取另一个序列化程序时定义,python-3.x,django-models,django-rest-framework,django-views,django-serializer,Python 3.x,Django Models,Django Rest Framework,Django Views,Django Serializer,我有多个序列化程序,独立运行良好。但是,在另一个序列化程序中获取它时,它会给出NameError:未定义名称“HostGroupSerializer” 在此行hostgroup=HostGroupSerializer中获取错误(many=True,required=False) HostGroupSerializer.py,它的许多字段表序列化程序。通过父项中的字段创建 class HostGroupSerializer(serializers.ModelSerializer): hos
class HostGroupSerializer(serializers.ModelSerializer):
host = MainHostSerializer()
group = MainGroupSerializer()
class Meta:
model = HostGroup
fields = (
'id',
'host',
'group'
)
read_only_fields = ['host', 'group']
def create(self, validated_data):
host_data = MainHost.objects.create(**validated_data.get('host'))
group_data = MainGroup.objects.create(**validated_data.get('group'))
conn = HostGroup.objects.create(
host=host_data,
group=group_data
)
return conn
主机组模型
class HostGroup(models.Model):
host = models.ForeignKey(MainHost, on_delete=models.CASCADE)
group = models.ForeignKey(MainGroup, on_delete=models.CASCADE)
具有多个字段的MainHost模型
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')
您可以像这样在hostgroup=HostGroupSerializer(many=True,required=False)中传递源代码
class MainHostSerializer(serializers.ModelSerializer):
group =serializers.PrimaryKeyRelatedField(queryset=HostGroup.objects.all(), many=True)
hostgroup = HostGroupSerializer(many=True, required=False,source="hostgroup_set")
class Meta:
model = MainHost
fields = (
'host_id',
'host_name',
'inventory',
'group'
)
depth = 2
非常简单的解决方案:
在MainHostSerializer将HostGroupSerializer移到上面解决NameError问题之前,必须先定义HostGroupSerializer仍然是相同的错误:hostgroup=HostGroupSerializer(many=True,required=False,source=hostgroup\u set)NameError:name'HostGroupSerializer'未定义请告诉我是否有人有任何想法?使用与此类似的方法,但获取NameError:
class MainHostSerializer(serializers.ModelSerializer):
group =serializers.PrimaryKeyRelatedField(queryset=HostGroup.objects.all(), many=True)
hostgroup = HostGroupSerializer(many=True, required=False,source="hostgroup_set")
class Meta:
model = MainHost
fields = (
'host_id',
'host_name',
'inventory',
'group'
)
depth = 2