python - Django بقية إطار التسلسل العديد من العديد من الميدان




django-models django-rest-framework (4)

جانغو 2.0

بالنسبة للكثيرين إلى العديد من الحقول ، إذا كنت تريد واحدة محددة:

class QuestionSerializer(serializers.ModelSerializer):

    topics_list = serializers.SerializerMethodField()

    def get_topics_list(self, instance):
        names = []
        a = instance.topics.get_queryset()
        for i in a:
            names.append(i.desc)
        return names
    class Meta:
        model = Question
        fields = ('topics_list',)

كيف أقوم بإجراء تسلسل لحقل كثير إلى كثير في قائمة شيء ما وإعادته من خلال إطار الراحة؟ في مثالي أدناه ، أحاول إرجاع المنشور مع قائمة بالعلامات المرتبطة به.

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

ستحتاج إلى TagSerializer ، له class Meta به model = Tag . بعد إنشاء TagSerializer ، قم بتعديل PostSerializer مع many=True لعلاقة ManyToManyField :

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

    class Meta:
        ...

الجواب هو DRF 3


هذا ما فعلته ، دعنا نفترض أنه يمكن أن يحتوي الكتاب على أكثر من مؤلف واحد ويمكن أن يكون للمؤلف أكثر من كتاب واحد: في النموذج:

class Author(models.Model):
    name = models.CharField(max_length=100, default="")
    last_name = models.IntegerField(default=0)

class Book(models.Model):
    authors = models.ManyToManyField(Author, related_name="book_list", blank=True)
    name = models.CharField(max_length=100, default="")
    published = models.BooleanField(default=True)

على المتسللين:

class BookSerializer(serializers.ModelSerializer):
    authors = serializers.PrimaryKeyRelatedField(queryset=Author.objects.all(), many=True)

    class Meta:
        model = Book
        fields = ('id', 'name', 'published', 'authors')


class AuthorSerializer(serializers.ModelSerializer):
    book_list = BookSerializer(many=True, read_only=True)

    class Meta:
        model = Author
        fields = ('id', 'name', 'last_name', 'book_list')

هذا يعمل لي.

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




django-serializer