Django->IntegrityError при создании записи с присвоенным ей внешним ключом модели

Сейчас я прохожу курс по Django API и последний мой проект - создание API для ресторана Little Lemon. Я скачал исходный код того же проекта и теперь реализую его на своей стороне. Сейчас я застрял на проблеме уже 2 дня, пробовал chatgpt, stack-overflow, но конкретных решений нет. Проблема в том, что я не могу вставить меню в DB. Потому что он выдает ошибку

IntegrityError at /api/menu-items NOT NULL constraint failed: LittleLemonAPI_menuitem.category_id

**Эта ошибка возникает, когда я пытаюсь вставить пункт меню с помощью Insomia. Но если я создаю тот же пункт с помощью Super User, он создается.

Это мой взгляд.**

class MenuItemListView(generics.ListCreateAPIView):
    queryset = MenuItem.objects.all()

    serializer_class = MenuItemSerializer

    def get_permissions(self):
        permission_classes = [IsAuthenticated]
        if self.request.method != 'GET':
            permission_classes = [IsAuthenticated, IsManager | IsAd

Это моя модель:

class MenuItem(models.Model):
    title = models.CharField(max_length=255)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    featured = models.BooleanField(db_index=True)
    category = models.ForeignKey(Category, on_delete=models.PROTECT)

    class Meta:
        unique_together = [['title', 'category']]
        
    def __str__(self):
        return self.title

Это мой сериализатор

class MenuItemSerializer(serializers.ModelSerializer):
    def validate_category(self, value):
        try:
            Category.objects.get(pk=value)
            return value
        except Category.DoesNotExist:
            raise serializers.ValidationError('Invalid category ID.')

    class Meta:
        model = MenuItem
        fields = ['id', 'title', 'price', 'featured', 'category']
        depth = 1

Вот мой Json-запрос:

{
    "title": "Spring Rolls",
    "price": "5.99",
    "featured": true,
    "category": 1
}

NOTE: Я создал категорию с помощью API, но когда я пытаюсь создать пункт меню, он выдает эту ошибку. из-за ограничения первичного ключа.

Я устал удалять миграцию и промывать данные и перезапустил процесс, но получил тот же результат.
Я также попробовал обратиться в chatgpt, но это не дало мне никакого конкретного решения.

когда я пытаюсь создать меню-элемент с помощью суперпользователя, он создается.
но когда я пытаюсь создать меню-элемент с помощью API, он дает мне

IntegrityError at /api/menu-items NOT NULL constraint failed: LittleLemonAPI_menuitem.category_id
class MenuItemSerializer(serializers.ModelSerializer):
category = serializers.SlugRelatedField(slug_field='id', queryset=Category.objects.all())

class Meta:
    model = MenuItem
    fields = ['id', 'title', 'price', 'featured', 'category']
    depth = 1

я только что получил ответ от ChatGPT, вам придется изменить сериализаторы для обработки id категории.

Поле SlugRelatedField - это поле, которое представляет цель отношения с помощью атрибута "slug". В данном контексте "slug" может быть любым полем в связанной модели, которое уникально идентифицирует экземпляры связанного режима. Здесь указывается, какое поле связанной модели (Category) должно использоваться в качестве "slug" для представления. Здесь используется поле id модели Category. Это означает, что при сериализации экземпляра MenuItem поле category будет представлено полем id связанного экземпляра Category.

Вернуться на верх