检索时通过序列化程序获取空的OrderedDict



我使用的是Django 4.xDjango REST框架,我已经构建了两个模型:

class Homepage(models.Model):
org_name = models.CharField(max_length=20, blank=True)
org_code = models.CharField(max_length=20, blank=True)
class Meta:
ordering = ('org_name',)
def __str__(self):
return self.org_name
class MainDiag(models.Model):
release = models.TextField(max_length=256, blank=True)
code = models.CharField(max_length=20, blank=True)
condition = models.CharField(max_length=20, blank=True)
homepage = models.ForeignKey(Homepage, related_name='main_diag', on_delete=models.CASCADE)

序列化程序:

class MainDiagSerializer(serializers.ModelSerializer):
class Meta:
model = MainDiag
fields = (
'release',
'code',
'condition',
)
class HomepageSerializer(serializers.ModelSerializer):
main_diag = MainDiagSerializer(many=False)
class Meta:
model = Homepage
fields = (
"org_name",
"org_code",
"main_diag",
)
def create(self, validated_data):
main_diag_data = validated_data.pop('main_diag')
homepage = Homepage.objects.create(**validated_data)
MainDiag.objects.create(homepage=homepage, **main_diag_data)
return homepage

前端的预期回报值:

{
org_name: '',
org_code: '',
main_page: {
release: '',
code: '',
condition: '',
}
}

我得到的:

{
org_name: '',
org_code: '',
main_page: {}
}

我可以成功地将MainDiags添加到MySQL中,但是,当我通过serializer = HomepageSerializer获得Homepages时,serializer.data中的main_page总是空的OrderedDict((。我的代码有问题吗?如何通过serializer.data获取主页面?非常感谢!

正如Willem所提到的,我应该使用OneToOneField,因为我想要一对一的关系
但是,空对象问题仍然存在。通过为MainDiag模型添加related_name来解决该问题:

homepage = models.ForeignKey(Homepage, 
related_name='main_diag', 
on_delete=models.CASCADE)

希望这能帮助到和我有类似问题的人。

最新更新