在DRF序列化程序中包含特定外键

时间:2015-10-08 15:23:16

标签: django django-rest-framework foreign-key-relationship

这里有两个简单的模型作为例子:

class Author(models.Model):
    name = models.CharField(blank=True, max_length=50)
    age = models.IntegerField(null=True, )

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author)
    date = models.DateField()

现在我要做的是为Book创建一个视图,使用Django Rest Framework从Author中获取其中一个值。这是一个例子ModelSerializer

class BookMetaSerializer(serializers.ModelSerializer):

class Meta:
    model = Book
    fields = ('title','date','author__name',)

麻烦的是,我无法像上面author__name那样访问DRF中的foriegn键的字段。我还没有能够根据文档弄清楚如何做到这一点。感谢所有帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用author_name参数定义source字段,以获取作者的姓名。

来自source argument:

上的DRF文档
  

将用于填充字段的属性的名称。可以   是一个只接受self参数的方法,例如   URLField('get_absolute_url')可以使用虚线表示法进行遍历   属性,例如EmailField(source='user.email')

最终代码:

class BookMetaSerializer(serializers.ModelSerializer):

    # use dotted notation to traverse to 'name' attribute       
    author_name = serializers.CharField(source='author.name', read_only=True) 

    class Meta:
        model = Book
        fields = ('title','date','author_name',)