25

はどのようなもののリストに多対多のフィールドをシリアル化し、残りのフレームワークを介してそれらを返すのですか?私の例では、私はそれに関連するタグのリストと共に投稿を返そうとします。Djangoの残りのフレームワークの多くの分野に多くのシリアライズ

models.py

class post(models.Model): 
    tag = models.ManyToManyField(Tag) 
    text = models.CharField(max_length=100) 

serializers.py

class PostSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Post 
     fields = ("text", "tag"??) 

views.py

class PostViewSet(viewsets.ReadOnlyModelViewSet): 
    queryset = Post.objects.all() 
    serializer_class = PostSerializer 
+0

使い方ヘルプを含めたい場合、私は、このフォーム内の項目をリストするために管理します。 は私がリストアップし、それを単純化したいと思い、それが可能である: "タグ":[ "TAG1"、 "タグ2"、...] – kengcc

+0

使用 'タグ= serializers.SlugRelatedField slug_field、READ_ONLY =真、真=(多くの=「タイトル」、//タグのfireldあなたはそれが動作PostSerializers –

答えて

31

あなたはが必要になります、そのclass Metamodel = Tagです。

class PostSerializer(serializers.ModelSerializer): 
    tag = TagSerializer(read_only=True, many=True) 

    class Meta: 
     ... 

Answer is for DRF 3

+0

で ') ALLOW_NULL =真を示したいと思います! :D このシリアライザをカンマ区切りのリストにするにはどうすればよいですか? クラスTagSerializer(serializers.ModelSerializer): クラスのMeta: モデル=タグ フィールド=( '名前') – kengcc

+1

は今、私が手: "タグ":[{ "名": "TAG1"}] "タグ":[ "TAG1"、 "タグ2"、...] – kengcc

+0

タグ= serializers.ListField(ソース= 'タグ')私はそれを簡素化したいと思います。これは、あなたがポストを通じて、タグを更新できるようにしたい場合はどのようなこれは@SachinGupta –

1

これは私の作品:TagSerializerが作成された後、ManyToManyField関係のためmany=TruePostSerializerを変更します。シリアライザで

tag = TagSerializer(source="tag", read_only=True, many=True) 
2

のinit方法では、まずserializers.ModelSerializer

から
class YourSerializer(serializers.ModelSerializer): 
をあなたのシリアライザを拡張)フィールドとrest_frameworkヴァリデにそのクエリセット

1のIDをクエリセットを渡すことができます

2)フィールドをメタクラスに含める

class YourSerializer(serializers.ModelSerializer): 
    class Meta: 
     fields = (..., 'your_field',) 
initメソッドで

3):

def __init__(self, *args, **kwargs): 
    super(YourSerializer, self).__init__(*args, **kwargs) 
    self.fields['your_field].queryset = <the queryset of your field> 

あなたは、フィルタを使用して、任意の引数の下で、そのフィールドのクエリセットを制限したり、通常あなたが行うように除外することができます。 「タグ」:[{「名」:「TAG1」}]あなたは@Brianからすべてのちょうど.objects.all使用()

関連する問題