Django REST Framework中的外键值 [英] Foreign key value in 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 wantReadOnlyField
.
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 $ c中将
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屋!