问题
I have two django models
model A
class A(models.Model):
aname = models.CharField(max_length=64, verbose_name='name')
and model 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)
The serializer for model B is
class BSerializer(serializers.ModelSerializer):
mod= ASerializer(many=False, read_only=True)
class Meta:
model = B
fields = (','id','bname','mod.aname')
I want the aname field of model A to be accessed with the serializer of model B. Using mod.aname doesn't work. It says
Field name
mod.aname
is not valid for modelB
.
How can i do it?
回答1:
How about this one? using parameter source
inside serializers.CharField
:
class BSerializer(serializers.ModelSerializer):
mod = serializers.CharField(
source='mod.aname',
read_only=True
)
class Meta:
model = B
fields = ('id','bname','mod')
回答2:
Use two underscores when referencing fields of related models as a string, like 'mod__aname'
.
class HotelSerializer(serializers.ModelSerializer):
mod= ASerializer(many=False, read_only=True)
class Meta:
model = Hotel
fields = ('id','bname','mod__aname')
This should work if ASerializer
looks something like this:
class ASerializer(serializers.ModelSerializer):
class Meta:
model = A
fields = '__all__'
来源:https://stackoverflow.com/questions/45036999/how-to-access-django-foreignkey-model-field