首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DRF:如何在json中将多对多字段连接成字符串

DRF:如何在json中将多对多字段连接成字符串
EN

Stack Overflow用户
提问于 2020-03-06 22:00:52
回答 1查看 143关注 0票数 0

models.py

代码语言:javascript
复制
class SalesPerson(models.Model):
    name = models.CharField(max_length=50)
    office = models.ForeignKey(Location, on_delete=models.SET_NULL, null=True)

class Project(models.Model):
    title = models.CharField(max_length=50)
    leader = models.ForeignKey(SalesPerson, on_delete=models.SET_NULL, null=True,related_name='leader')    
    location = models.ForeignKey(Location, on_delete=models.SET_NULL, null=True)
    product = models.ManyToManyField(Product)    
    sales_person = models.ManyToManyField(SalesPerson)

serializers.py

代码语言:javascript
复制
class ProjectSerializer(serializers.ModelSerializer):
    leader_name= serializers.ReadOnlyField(source='leader.name')
    location_name= serializers.ReadOnlyField(source='location.name')
    product = serializers.SlugRelatedField(read_only=True, slug_field='name', many=True)    
    sales_person = serializers.SlugRelatedField(read_only=True, slug_field='name', many=True)
    class Meta:
        model = Project
        fields = ('id', 'title', 'leader_name', 'location_name', 'product', 'sales_person')

class SPSerializer(serializers.ModelSerializer):
    projects = ProjectSerializer(many=True, read_only=True, source='project_set')
    office_name= serializers.ReadOnlyField(source='office.city')
    class Meta:
        model = SalesPerson
        fields = ('id', 'name', 'office_name', 'email', 'projects')

结果:

代码语言:javascript
复制
{
        "id": 2,
        "name": "Angela",
        "office_name": "NSW Sydney",
        "email": "angela@angela.com",
        "projects": [
            {
                "id": 1,
                "title": "Mall Orchid",
                "leader_name": "Boris",
                "product": [
                    "Split wall mounted"
                ],
                "sales_person": [
                    "Angela",
                    "Boris",
                    "David"
                ],                
            },
            {
                "id": 6,
                "title": "Mall Petunia",
                "leader_name": "Boris",
                "product": [
                    "Split duct"
                ],
                "sales_person": [
                    "Angela",
                    "Boris",
                    "David"
                ],                
            },            
        ]
    },

我将使用react native来使用json。

我知道如何遍历“项目”

但是,我希望避免迭代"sales_person“,以使呈现数组更简单

所以我确定我必须把sales_person变成一个字符串,但是今天我用谷歌搜索了好几个小时,就是找不到答案

如果可能的话,我希望在Django Rest框架中做到这一点,而不是在Expo React Native中

所以简而言之,我想要得到这样的结果:

代码语言:javascript
复制
{
        "id": 2,
        "name": "Angela",
        "office_name": "NSW Sydney",
        "email": "angela@angela.com",
        "projects": [
            {
                "id": 1,
                "title": "Mall Orchid",
                "leader_name": "Boris",
                "product": [
                    "Split wall mounted"
                ],
                "sales_person": "Angela", "Boris", "David",                
            },
            {
                "id": 6,
                "title": "Mall Petunia",
                "leader_name": "Boris",
                "product": [
                    "Split duct"
                ],
                "sales_person": "Angela", "Boris", "David",                
            },            
        ]
    },

非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2020-03-07 11:32:32

我找到了答案

我写这篇文章是为了将来参考。

代码语言:javascript
复制
class ProjectSerializer(serializers.ModelSerializer):
    leader_name= serializers.ReadOnlyField(source='leader.name')
    location_name= serializers.ReadOnlyField(source='location.city')
    product = serializers.SlugRelatedField(read_only=True, slug_field='name', many=True)
    sales_person = serializers.SerializerMethodField('get_sales_person')
    class Meta:
        model = Project
        fields = ('id', 'title', 'leader_name', 'location_name', 'product', 'sales_person')

    def get_sales_person(self, obj):
        return ', '.join([sales_person.name for sales_person in obj.sales_person.all()])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60565614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档