2017-06-30 13 views
0

こんにちは私はDRFが新しく、テーブルを外部キーでシリアル化できますが、多対多フィールドの場合はDjango Rest Framework - ManyToManyFieldをデフォルトの 'through'でシリアライズ

Package <> Package_product_atom <> Product_atom

これをシリアル化する方法はありますか。これまでのところ、私がしようとしているものです:

class Product_atomSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Product_atom 
     ready_only = True 
     fields = ('id','title', 'title_override', 'price', 'price_override', 'description', 'description_override','image', 'image_override' ,'tags', 'product_alt', 'date_modified', 'date_created') 

class PackageSerializer(serializers.ModelSerializer): 
    atomics = Product_atomSerializer(many=True) 
    class Meta: 
     model = Package 
     ready_only = True 
     fields = ('id', 'title', 'price', 'discount', 'image', 'tags', 'atomics', 'date_modified', 'date_created') 

私のモデルは以下のとおりです。

class Product_atom(models.Model): 

    title = models.CharField(max_length=255, blank=False) 
    title_override = models.BooleanField(default=False, blank=False) 
    price = models.SmallIntegerField(default=0, blank=False) 
    price_override = models.BooleanField(default=False, blank=False) 
    description = models.TextField(blank=True) 
    description_override = models.BooleanField(default=False, blank=False) 
    image = models.ImageField(upload_to = 'uploads', default = '', blank=True) 
    image_override = models.BooleanField(default=False, blank=False) 
    tags = models.CharField(max_length=255, blank=False) 
    active = models.BooleanField(default=True, blank=False) 
    date_created = models.DateTimeField(auto_now_add=True) 
    date_modified = models.DateTimeField(auto_now=True) 
    product_alt = models.ForeignKey(Product_alt, related_name='atomics', on_delete=models.CASCADE) 
    default_provider = models.ForeignKey(Provider, on_delete=models.CASCADE) 

    def __str__(self): 
     return "{}".format(self.title) 

class Package(models.Model): 

    title = models.CharField(max_length=255, blank=False) 
    price = models.SmallIntegerField(default=0, blank=False) 
    discount = models.SmallIntegerField(default=10, blank=False) 
    image = models.ImageField(upload_to = 'uploads', default = '', blank=True) 
    tags = models.CharField(max_length=255, blank=False) 
    active = models.BooleanField(default=True, blank=False) 
    date_created = models.DateTimeField(auto_now_add=True) 
    date_modified = models.DateTimeField(auto_now=True) 
    zone = models.ForeignKey(Zone, on_delete=models.CASCADE) 
    product_atom = models.ManyToManyField(Product_atom) 

    def __str__(self): 
     return "{}".format(self.title) 

それはForeignKeyの関係だったが、私はのManyToManyFieldでこれを実行することができていない場合は動作しますどの、私は取得していますエラーは次のとおりです。

AttributeError: Got AttributeError when attempting to get a value for field atomics on serializer PackageSerializer . The serializer field might be named incorrectly and not match any attribute or key on the Package instance. Original exception text was: 'Package' object has no attribute 'atomics'.

私は多くの関係1つのシリアル化が、それを固定related_nameを使用した場合の前に、このエラーが発生しました。 throughを使用してカスタムモデルを配置し、related_nameを追加してそれらを修正するでしょうか?ありがとうございました!

答えて

1

変数名 'atomics'を 'product_atom'に変更しようとしましたか?

あなたのPackageクラスによると、 'product_atom'には 'atomics'という関連名前はありません。

+0

これは....うまくいった!私はそれに関連する名前を設定して以来、それはアトミックで動作しない理由は分かりません – Amirgem

+0

私はあまりにも疲れていたと思う、私は間違ったモデルに設定... – Amirgem

関連する問題