Django REST Framework中的外键值 [英] Foreign key value in Django REST Framework

查看:199
本文介绍了Django REST Framework中的外键值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

models.py:

class Station(models.Model):
    station = models.CharField()

class Flat(models.Model):
    station = models.ForeignKey(Station, related_name="metro")
    # another fields

然后在 serializers.py 中:

class StationSerializer(serializers.ModelSerializer):
    station = serializers.RelatedField(read_only=True)

    class Meta:
        model = Station


class FlatSerializer(serializers.ModelSerializer):
    station_name = serializers.RelatedField(source='station', read_only=True)

    class Meta:
        model = Flat
        fields = ('station_name',)

我有一个错误:


NotImplementedError: RelatedField.to_representation()必须实施。
如果要从REST框架版本2升级,则可能需要 ReadOnlyField

我读了,但这对我没有帮助。

如何解决这个问题吗?

谢谢!

NotImplementedError: RelatedField.to_representation() must be implemented. If you are upgrading from REST framework version 2 you might want ReadOnlyField.
I read this, but it does not help me.
How to fix that?
Thanks!


推荐答案

RelatedField 是处理关系的所有字段的基类。通常,除非将其作为自定义字段的子类,否则不应该使用它。

RelatedField is the base class for all fields which work on relations. Usually you should not use it unless you are subclassing it for a custom field.

在您的情况下,您甚至根本不需要任何相关字段。您只在寻找只读的单个外键表示形式,因此只能使用 CharField

In your case, you don't even need a related field at all. You are only looking for a read-only single foreign key representation, so you can just use a CharField.

class StationSerializer(serializers.ModelSerializer):
    station = serializers.CharField(read_only=True)

    class Meta:
        model = Station


class FlatSerializer(serializers.ModelSerializer):
    station_name = serializers.CharField(source='station.name', read_only=True)

    class Meta:
        model = Flat
        fields = ('station_name', )

您似乎还想在 FlatSerializer Station 对象的名称 $ c>。您应该将指向确切的字段,所以我为您将其更新为 station.name

You also appear to want the name of the Station object in your FlatSerializer. You should have the source point to the exact field, so I updated it to station.name for you.

这篇关于Django REST Framework中的外键值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆