Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 更改序列化程序以显示foreignKey字段的id和标题_Django_Django Models_Django Rest Framework_Django Serializer - Fatal编程技术网

Django 更改序列化程序以显示foreignKey字段的id和标题

Django 更改序列化程序以显示foreignKey字段的id和标题,django,django-models,django-rest-framework,django-serializer,Django,Django Models,Django Rest Framework,Django Serializer,我使用的是DRF,我有一个配置文件序列化程序,其中的组字段是组模型的外键。 配置文件序列化程序: class ProfileSerializer(serializers.ModelSerializer): class Meta: model = Profile fields = ('group', ...) class GroupSerializer(serializers.ModelSerializer): class Meta:

我使用的是DRF,我有一个配置文件序列化程序,其中的组字段是组模型的外键。 配置文件序列化程序:

class ProfileSerializer(serializers.ModelSerializer):

    class Meta:
        model = Profile
        fields = ('group', ...)
class GroupSerializer(serializers.ModelSerializer):

    class Meta:
        model = Group
        fields = ('title', 'id')
        extra_kwargs = {'id': {'read_only': True}}
配置文件模型:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    # other fields
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
组模型:

class Group(models.Model):
    title = models.CharField(max_length=100)

    def __str__(self):
        return self.title
组序列化程序:

class ProfileSerializer(serializers.ModelSerializer):

    class Meta:
        model = Profile
        fields = ('group', ...)
class GroupSerializer(serializers.ModelSerializer):

    class Meta:
        model = Group
        fields = ('title', 'id')
        extra_kwargs = {'id': {'read_only': True}}
我在水疗中心有一条路线,显示了一系列的个人资料。我想为每个配置文件显示组标题,但此序列化程序只为我提供组id,我不想创建另一个视图来获取组id并为我提供标题。所以我搜索了一下,首先是2个解决方案
StringRelatedField
,即
read\u only
SlugRelatedField
。我更改了
ProfileSerializer
并添加了
SlugRelatedField
,如下所示:

class ProfileForAdminSerializer(serializers.ModelSerializer):
    group = serializers.SlugRelatedField(
        many=False,
        queryset=Group.objects.all(),
        slug_field='title'
    )

    class Meta:
        model = Profile
        fields = ('group', ...)

现在我有权访问配置文件组的标题,但问题是我必须使用“组标题”字段创建配置文件,但我想像以前一样使用组的发送id创建配置文件,也可以访问组的标题,而无需发送另一个请求。(抱歉英语不好)

您是否考虑过序列化程序字段上的
参数

应该是这样的

group_title = serializers.ReadOnlyField(source='group.title')

class Meta:
    ...
    fields = ('group_title', ...)

您是否考虑过序列化程序字段上的
参数

应该是这样的

group_title = serializers.ReadOnlyField(source='group.title')

class Meta:
    ...
    fields = ('group_title', ...)