如何访问 Django ForeignKey 模型字段?
How to access Django ForeignKey model field?
我有两个 django 模型
模型 A
class A(models.Model):
aname = models.CharField(max_length=64, verbose_name='name')
和模型 B
class B(models.Model):
bname = models.CharField(max_length=64, verbose_name='name')
mod = models.ForeignKey(A, related_name='a_b',null=True,on_delete=models.CASCADE)
模型 B 的序列化器是
class BSerializer(serializers.ModelSerializer):
mod= ASerializer(many=False, read_only=True)
class Meta:
model = B
fields = (','id','bname','mod.aname')
我希望使用模型 B 的序列化程序访问模型 A 的 aname 字段。使用 mod.aname 不起作用。它说
Field name mod.aname
is not valid for model B
.
我该怎么做?
将相关模型的字段引用为字符串时使用两个下划线,如'mod__aname'
。
class HotelSerializer(serializers.ModelSerializer):
mod= ASerializer(many=False, read_only=True)
class Meta:
model = Hotel
fields = ('id','bname','mod__aname')
如果 ASerializer
看起来像这样,这应该有效:
class ASerializer(serializers.ModelSerializer):
class Meta:
model = A
fields = '__all__'
这个怎么样?在 serializers.CharField
:
中使用参数 source
class BSerializer(serializers.ModelSerializer):
mod = serializers.CharField(
source='mod.aname',
read_only=True
)
class Meta:
model = B
fields = ('id','bname','mod')
我有两个 django 模型
模型 A
class A(models.Model):
aname = models.CharField(max_length=64, verbose_name='name')
和模型 B
class B(models.Model):
bname = models.CharField(max_length=64, verbose_name='name')
mod = models.ForeignKey(A, related_name='a_b',null=True,on_delete=models.CASCADE)
模型 B 的序列化器是
class BSerializer(serializers.ModelSerializer):
mod= ASerializer(many=False, read_only=True)
class Meta:
model = B
fields = (','id','bname','mod.aname')
我希望使用模型 B 的序列化程序访问模型 A 的 aname 字段。使用 mod.aname 不起作用。它说
Field name
mod.aname
is not valid for modelB
.
我该怎么做?
将相关模型的字段引用为字符串时使用两个下划线,如'mod__aname'
。
class HotelSerializer(serializers.ModelSerializer):
mod= ASerializer(many=False, read_only=True)
class Meta:
model = Hotel
fields = ('id','bname','mod__aname')
如果 ASerializer
看起来像这样,这应该有效:
class ASerializer(serializers.ModelSerializer):
class Meta:
model = A
fields = '__all__'
这个怎么样?在 serializers.CharField
:
source
class BSerializer(serializers.ModelSerializer):
mod = serializers.CharField(
source='mod.aname',
read_only=True
)
class Meta:
model = B
fields = ('id','bname','mod')