@frilix
Иногда "творю"

Django Rest Framework ManyToMany?

Не удается серилизовать поле с отношением "многие ко многим". Ошибок не выдается, а само поле при Get запросе в ответе не появляется.

Модели:
class Category(models.Model):
    category_title = models.CharField(max_length=100, db_index=True)
    category_slug = models.SlugField(max_length=100, db_index=True)

    def __str__(self): return self.category_title

    class Meta:
        db_table = 'category'
        verbose_name = 'Категория'
        verbose_name_plural = 'Категории'

class Article(models.Model):
    STATUS_CHOICES = (
        ('draft', 'Черновик'),
        ('published', 'Опубликован'),
    )
    article_title = models.CharField(max_length=200, verbose_name='Название')
    article_slug = models.SlugField(max_length=100, unique=True)
    article_text = RedactorField(verbose_name='Текст')
    article_date = models.DateTimeField(auto_now_add=True, verbose_name='Дата')
    article_likes = models.PositiveIntegerField(default=0, editable=False)
    article_category = models.ManyToManyField(Category, verbose_name='Категории')
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')
    emailed = models.BooleanField(default=False, verbose_name='Отправлен по email')

    # Manager
    objects = models.Manager()  # Дефолтный менеджер
    published = PublishedManager()  # Кастомный менеджер


Сериализаторы:
from rest_framework import serializers

# App
from .models import Article, Category


class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ('id', 'category_title', 'category_slug')

class PostSerializer(serializers.ModelSerializer):
    categories = CategorySerializer(many=True, read_only=True)

    class Meta:
        model = Article
        fields = ('id', 'article_slug', 'categories', 'article_title', 'article_text', 'article_date', 'article_likes')


По идее все должно работать, но по факту нет. ForeingKey работает при сериализации, а вот ManyToMany почему-то нет.
  • Вопрос задан
  • 5296 просмотров
Решения вопроса 1
Assargin
@Assargin
Перед ответом смотрю наличие ✔ в ваших вопросах
И как сериализатор должен догадаться о том, из какого поля модели брать значение для сериализации, если названия полей сериализатора и модели у вас отличаются?
class PostSerializer(serializers.ModelSerializer):
    categories = CategorySerializer(many=True, read_only=True, source='article_category')
...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы