首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django Restful Api的ManytoMany模型来展示异物

Django Restful Api的ManytoMany模型来展示异物
EN

Stack Overflow用户
提问于 2017-07-31 15:41:07
回答 1查看 170关注 0票数 0

“品牌”对象是“公司”的外键,它们是ManytoMany关系,品牌对象存在字段"company_Group“

模型如下:

代码语言:javascript
复制
class Brand(models.Model):
      Company_Group = models.ManyToManyField(Company)
      Brand_Group = models.CharField(u'Brand Group',max_length=255, default="")
      Pref_Brand_Name_Flg = models.CharField(u'Preferred Name Flag',max_length=255, default="")
      Pref_Brand_Name = models.CharField(u'Preferred Name',max_length=255, default="")
      PrimaryContact = models.ForeignKey(UserRole, null=True, blank=True) 



class Company(models.Model):
      Pref_Company_Name_Flg = models.CharField(u'Preferred Name Flag',max_length=255, default="")
      Pref_Company_Name = models.CharField(u'Preferred Name',max_length=255, default="")
      Company_Type = models.CharField(u'Company Type',max_length=255, default="")

序列化程序

代码语言:javascript
复制
class BrandSerializer(serializers.ModelSerializer):
    class Meta:
        model = Brand
        fields = '__all__'

序列化程序如下所示,data_export_setting.Company_form_stand的字段为

代码语言:javascript
复制
class CompanySerializer(serializers.HyperlinkedModelSerializer):
    Brand = BrandSerializer(source='brand', read_only=True)
    class Meta:
        model = Company
        Company_form_stand=['id', 'Brand', 'Company_Type','Company_Name','company_Name_SC']
        fields = data_export_setting.Company_form_stand
        depth = 2

    def create(self, validated_data):
        return Company.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.__dict__.update(**validated_data)
        instance.save()
        return instance

视图集如下所示

代码语言:javascript
复制
class BrandViewSet(viewsets.ModelViewSet):
     queryset = Brand.objects.all()
     serializer_class = BrandSerializer
     model = Brand

     def get_serializer(self, *args, **kwargs):
         if 'data' in kwargs:
             data = kwargs['data']
             if isinstance(data, list):
                 kwargs['many'] = True
    return super(BrandViewSet, self).get_serializer(*args, **kwargs)


class CompanyViewSet(viewsets.ModelViewSet):
      queryset = Company.objects.all()
      serializer_class = CompanySerializer

我想用Brand对象来展示公司对象,但是它似乎忽略了品牌对象及其字段

感谢您的帮助,谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-31 17:58:02

试一下,

代码语言:javascript
复制
Brand = BrandSerializer(source='brand_set', read_only=True, many=True)

由于您已经将字段关系定义为ManyToMany,因此多个Brand对象与单个Company实例相关。通过使用反向关系,您可以在序列化程序中访问它们,并且many=True允许序列化程序处理关系中的多个对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45410024

复制
相关文章

相似问题

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