Получение пустого OrderedDict через Serializer при извлечении
Я использую Django 4.x и Django REST Framework, я построил две модели:
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
в MySQL, однако, когда я получаю Homepage
через serializer = HomepageSerializer
, главная_страница в serializer.data
всегда является пустым OrderedDict(). Есть ли какая-то проблема в моем коде? Как я могу получить главную_страницу через serializer.data
? Большое спасибо!
Как отметил Виллем, я должен использовать OneToOneField, поскольку мне нужно отношение один-к-одному.
Однако проблема пустого объекта все еще существует после этого.
Проблема решена путем добавления related_name
для модели MainDiag:
homepage = models.ForeignKey(Homepage, \
related_name='main_diag', \
on_delete=models.CASCADE)
Надеюсь, что это поможет кому-нибудь, у кого есть такая же проблема, как у меня.