是的,我知道有很多关于DRF序列化器关系的问题已经得到解答。但是没有他们可以帮助我或我倾倒以获得它......
我有以下型号:
class User(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=30)
...
class Person(models.Model):
id = models.IntegerField(primary_key=True)
person_id = models.IntegerField()
birthdate = models.DateTimeField(blank=True, null=True)
...
现在我希望birthdate
Person
中的User
字段如下:
{
"id": 397,
"name": "name",
"birthdate": "2015-11-11T00:00:00Z",
...
}
所以我这样做了:
class UserSerializer(serializers.ModelSerializer):
birthdate = serializers.SerializerMethodField()
class Meta:
model = User
def get_birthdate(self, obj):
person = PersonSerializer(Person.objects.get(person_id=obj.pk)).data
return person['birthdate']
它有效但是必须有更好的方法。我想以这种方式关联多个字段,结果将是笨拙的代码,所以请帮助我!
答案 0 :(得分:1)
再次感谢dhke。他在评论中帮助我找到了我的问题的答案。
我唯一要做的就是向OneToOneField
添加Person
:
class Person(models.Model):
id = models.IntegerField(primary_key=True)
person_id = models.OneToOneField(User, related_name='person')
birthdate = models.DateTimeField(blank=True, null=True)
...
然后将以下字段添加到UserSerializer
:
birthdate = serializers.DateTimeField(source='person.birthdate')
这就是整个魔术。
(我喜欢DRF!)