Как отобразить название категории на модели товара? - PullRequest
0 голосов
/ 12 октября 2018

Я хочу отобразить поле категории в статье с точки зрения ее имени (выбор).В настоящее время он отображается как идентификатор.Кроме того, я хочу иметь возможность обновить модель статьи, введя имя категории (выбор) вместо ее идентификатора (в настоящее время я делаю это).Как я могу реализовать это?

Это то, что я имею до сих пор.

Модели

class Category(models.Model):

      """ 
      Model for Category
      """ 

    CATEGORY_CHOICES = (

        ('Sports', 'Sports'),
        ('Music', 'Music'), 
        ('Drama', 'Drama'),
        ('Money', 'Money'), 
        ('Movies', 'Movies'), 
        ('Cars', 'Cars'),
        ('General', 'General'), 
    )
    name = models.CharField(max_length=30, choices=CATEGORY_CHOICES, default='General',null=False, blank=True)


    def __str__(self):

        return self.name

class Article(models.Model):
      """
      Model for an Article
      """ 

    title = models.CharField(max_length=255, null=False, blank=False)

    description = models.TextField(null=False, blank=False)

    body = models.TextField(null=False, blank=False,)

    category = models.ForeignKey(Category, on_delete=models.CASCADE)

Сериализаторы

class ArticleSerializer(serializers.ModelSerializer):
      """
      Serializer for Article.
      """

    class Meta:
        model = Article

        fields = ('title','description','body',''category')

class CategorySerializer(serializers.ModelSerializer):
      """
      Serializer for Category.
      """

    class Meta:
        model = Category

        fields = ('name',)

Токовый выходenter image description here

Ожидаемый результат enter image description here

1 Ответ

0 голосов
/ 12 октября 2018

Вы можете изменить ArticleSerializer на поле category как CharField с атрибутом source:

class ArticleSerializer(serializers.ModelSerializer):
    category = serializers.CharField(source='category.name')

    class Meta:
        model = Article
        fields = ('title','description','body',''category')

Для возможности обновленияКатегория Article через имя, вы должны убедиться, что name является уникальным полем для Category.Если да, то вы можете использовать SlugRelatedField.

category = serializers.SlugRelatedField(slug_field='name')
...