是的,我知道关于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']
是的,但是必须有更好的方法。我有多个要通过这种方式关联的字段,结果将是尴尬的代码,所以请帮助我!
再次感谢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!)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句