2017-07-31 88 views
0

「品牌」的對象是「公司」外鍵,它們是多對多的關係,以及品牌對象存在的領域「company_Group」多對多模型的Django的RESTful的API來顯示異物

的型號如下:

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="") 

串行

class BrandSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Brand 
     fields = '__all__' 

串行如下,data_export_setting.Company_form_stand是字段作爲

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 

的視圖集如下

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 

,我想展示公司的品牌對象的對象,但是,它似乎忽視了品牌對象及其外地

the field ignore the company!

感謝任何幫助,謝謝

+1

公司沒有「品牌」字段,所以我不確定您希望數據來自哪裏。 –

+0

公司和品牌的關係是ManytoMany,所以我想在公司展示品牌對象,你有沒有什麼方法可以在不改變模型的情況下展示它,就像添加一些不在模型中的字段一樣,謝謝〜 –

+0

但是沒有「品牌對象」這樣的東西。有與每個公司有關的*許多*品牌對象。 –

回答

2

嘗試,

Brand = BrandSerializer(source='brand_set', read_only=True, many=True) 

因爲您已將字段關係定義爲ManyToMany,因此多個Brand對象與單個Company實例相關。通過使用反向關係,您可以在您的序列化程序中訪問它們,並且many=True可讓序列化程序處理關係中的多個對象。

+0

是的,它的工作原理!順便說一句,我想選擇一些領域來展示,我該怎麼做呢?在此先感謝〜 –

+0

您可以選擇要在序列化程序的Meta類的'fields'屬性中顯示哪些字段。 – zaidfazil

+0

我用下面的序列化,但是,它似乎沒有工作〜 「類CompanySerializer(serializers.HyperlinkedModelSerializer): 品牌= BrandSerializer(來源= 'brand_set',READ_ONLY =真,許多= TRUE) BRAND_NAME =串行。 ReadOnlyField(source ='Brand.Name',read_only = True) class Meta: model = Company fields = ['id','Brand','Brand_Name','Company_Type','Company_Name','Company_Name_SC'] –