Django休息框架如何获得外键值

时间:2015-12-23 18:43:26

标签: django django-rest-framework

我有两个基本类,我有一个像这样的序列化器:

class SomeSerializer(serializers.ModelSerializer):

    def get_fields(self, *args, **kwargs):
        fields = super(SomeSelializer, self).get_fields()
        user = self.context['view'].request.user
        fields['project'].queryset = fields['project'].queryset.filter(user=user)
        return fields

    class Meta:
        model = SomeModel
        fields = ('id', 'name', 'project', 'user')
        read_only_fields = ('id','user')

项目字段是建模项目的外键。如何从项目中获取某个字段而不是其ID?

当我尝试这个时:

project = ProjectSerializer(source="project")

我得到了AttributeError:' ProjectSerializer'对象没有属性' queryset'

2 个答案:

答案 0 :(得分:0)

您无法使用序列化程序访问“项目”字段。首先在python shell中创建模型的对象,然后使用

对其进行序列化
serializer=ProjectSerializer(object)

然后,您可以使用 -

访问项目字段
 serializer.data.project   

答案 1 :(得分:0)

我建议使用SerializerMethodField定义自定义属性:

class SomeSerializer(ModelSerializer):
    project_some_field = SerializerMethodField()
    # ...
    def get_project_some_field(self, obj):
        return obj.some_field

NB :按照惯例,如果属性名称为x,则该方法应为get_x < / p>

有关详细信息,请查看here