2017-07-31 8 views
0

「ブランド」オブジェクト「会社」の外部キーである、彼らは多対多の関係であり、ブランドのオブジェクトは「company_Group」フィールドに存在する多対多モデルのジャンゴのRestfulアピ

次のようにモデルがあります:

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 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 

を次のように

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 

ビューセットがあり、私は会社がブランドのオブジェクトとオブジェクトを表示したい

the field ignore the company!

は、助けを感謝します。

+1

会社には「ブランド」フィールドがないため、そのデータがどこから来ると予想されているのかわかりません。 –

+0

会社とブランドの関係がManytoManyなので、会社のブランドオブジェクトを見せたい、モデルを変更しないで表示する方法はありますか?モデルにはないフィールドを追加するだけのように、ありがとう〜 –

+0

しかし、 "ブランドオブジェクト"のようなものはありません。各企業に関連する*多くの*ブランドオブジェクトがあります。 –

答えて

2

お試し、

複数の Brandオブジェクトが単一 Companyインスタンスに関連している、 ManyToManyとフィールドの関係を定義した、以来
Brand = BrandSerializer(source='brand_set', read_only=True, many=True) 

。逆リレーションを使用するとシリアライザでアクセスでき、many=Trueはシリアライザがリレーション内の複数のオブジェクトを処理できるようにします。

+0

はい、それは動作します!ちなみに 、私はいくつかのフィールドを選択したい、どのように私はそれを行うには?ありがとうございます〜 –

+0

シリアライザの 'Meta'クラスの' fields'属性に表示するフィールドを選択できます。 ブランド= BrandSerializer(ソース= 'brand_set'、READ_ONLY = Trueの場合、多くの=真) BRAND_NAME =シリアライザ:私は、次のシリアライザを使用 – zaidfazil

+0

は、しかし、〜 「クラスCompanySerializer(serializers.HyperlinkedModelSerializer)が動作しないようです。 モデル=会社 fields = ['id'、 'ブランド'、 'ブランド名'、 'C​​ompany_Type'、 'C​​ompany_Name'、 'C​​ompany_Name_SC'] ReadOnlyField –

関連する問題