@EgorLee

Как правильно отобразить данные в сериализаторе?

У меня есть следующие модели :
models.py
class Ingredient(models.Model):
    name = models.CharField(max_length=255, unique=True)

    def __str__(self):
        return self.name


class Tag(models.Model):
    name = models.CharField(max_length=255, unique=True)

    def __str__(self):
        return self.name


class Recipe(models.Model):
    title = models.CharField(max_length=255)
    photo = models.ImageField(upload_to="recipe_photo/", blank=True)
    lvl_skill = models.CharField(max_length=50)
    country_kitchen = models.CharField(max_length=255)
    category = models.CharField(max_length=255)
    step_cooking = models.TextField()
    tags = models.ManyToManyField(Tag)
    ingredients = models.ManyToManyField(Ingredient, through='Ingredient_count')

    def __str__(self):
        return self.title

    class Meta:
        ordering = ('title',)

class Ingredient_count(models.Model):
    recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, null=True)
    ingredient = models.ForeignKey(Ingredient, on_delete=models.CASCADE, null=True)
    count = models.CharField(max_length=255)

    def __str__(self):
        return self.ingredient.name


Что бы получить данные из Ingredient_count в serializers.py я использую:

class RecipeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Recipe
        fields = ['title', 'ingredient_count_set']
        depth = 1


и в ответ я получаю данную структуру:
{'ingredient_count_set': [OrderedDict([('id', 350373), ('count', '100 г'), ('recipe', 40887), ('ingredient', 7951)]), OrderedDict([('id', 350372), ('count', '100 г'), ('recipe', 40887), ('ingredient', 8433)]), OrderedDict([('id', 350374), ('count', '1 шт.'), ('recipe', 40887), ('ingredient', 7861)]), OrderedDict([('id', 350375), ('count', '1 шт.'), ('recipe', 40887), ('ingredient', 7901)])]}

Правильно ли я получаю данные из смежной таблицы? Если нет то как правильно?
И как сделать так что бы вместо id показывалось поле name?
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ответы на вопрос 1
@MEDIOFF
Python Developer
Что значит правильно или нет? Объясните что вы хотите получить, вот так имя не надо выводить:
def __str__(self):
        return self.ingredient.name

Ибо у вас идет запрос в базу что бы получить имя, что не есть хорошо.
Если хотите что бы имя выводилось,то почитайте как делать сериализацию связанных моделей
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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