我使用的是Django 4.x和Django 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: {}
}
我可以成功地将MainDiag
s添加到MySQL中,但是,当我通过serializer = HomepageSerializer
获得Homepage
s时,serializer.data
中的main_page总是空的OrderedDict((。我的代码有问题吗?如何通过serializer.data
获取主页面?非常感谢!
正如Willem所提到的,我应该使用OneToOneField,因为我想要一对一的关系
但是,空对象问题仍然存在。通过为MainDiag模型添加related_name
来解决该问题:
homepage = models.ForeignKey(Homepage,
related_name='main_diag',
on_delete=models.CASCADE)
希望这能帮助到和我有类似问题的人。