How to access Django ForeignKey model field?

≡放荡痞女 提交于 2019-12-12 04:15:33

问题


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 model B.

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!