Ошибка целостности Django: ограничение NOT NULL не выполнено. Как исправить?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка целостности Django: ограничение NOT NULL не выполнено. Как исправить?

Сообщение Anonymous »

Я новичок в Джанго. Я слаб в реляционной сериализации. Пожалуйста, помогите мне решить следующую проблему.
Проблема: я хочу создать модель, сериализаторы и весь необходимый код. По сути, я хочу решить курс sera по оценке проекта курса API. Когда я запускаю свой код и тестирую, я вижу возникшую ошибку: django.db.utils.IntegrityError: Ошибка ограничения NOT NULL: LittleLemonAPI_menuitem.category_id
Это происходит, когда я определяю глубину =1 в MenuItemSerializer и создайте новый пункт меню. Если я удалю глубину = 1 и категорию = CategorySerializer; никакой ошибки не произошло. Но тогда данные таблицы категорий не заполняются.
Ниже я добавляю необходимый код:
serializers.py

Код: Выделить всё

from rest_framework import serializers, validators
from .models import Category, MenuItem, Cart, Order, OrderItem
from django.contrib.auth.models import User, Group, Permission

class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = ['id', 'slug', 'title']

validators = [
validators.UniqueTogetherValidator(
queryset=Category.objects.all(),
fields=('title',),
message="Category must be unique"
)
]

class MenuItemSerializer(serializers.ModelSerializer):
class Meta:
model = MenuItem
category = CategorySerializer()
fields = ['id', 'title', 'price',
'featured', 'inventory', 'category',]
depth = 1

class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'username', 'email', 'groups',]
depth = 1

class CartSerializer(serializers.ModelSerializer):
class Meta:
model = Cart
user = UserSerializer()
menuitem = MenuItemSerializer()
fields = ['id', 'user', 'menuitem', 'quantity', 'unit_price', 'price']
depth = 1
validators = [
validators.UniqueTogetherValidator(
queryset=MenuItem.objects.all(),
fields=('id',),
message="Menuitem should be unique in this curt"
),
validators.UniqueTogetherValidator(
queryset=User.objects.all(), fields=('id'), message="User should be unique")
]

class OrderSerilizer(serializers.ModelSerializer):
class Meta:
model = Order
fields = ['id', 'user', 'delivery_crew', 'status', 'total', 'date']
depth = 1

class OrderItemSerializer(serializers.ModelSerializer):
class Meta:
model = OrderItem
fields = ['id', 'order', 'menuitem', 'quantity', 'unit_price', 'price']
depth = 1
validators = [
validators.UniqueTogetherValidator(
queryset=Order.objects.all(),
fields=('id',)
),
validators.UniqueTogetherValidator(
queryset=MenuItem.objects.all(),
fields=('id',)
)
]

models.py

Код: Выделить всё

from django.db import models
from django.contrib.auth.models import User
# Create your models here.

class Category(models.Model):
slug = models.SlugField()
title = models.CharField(max_length=255, db_index=True)

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

class Cart(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
menuitem = models.ForeignKey(MenuItem, on_delete=models.CASCADE)
quantity = models.SmallIntegerField(),
unit_price = models.DecimalField(max_digits=6, decimal_places=2)
price = models.DecimalField(max_digits=6, decimal_places=2)

class Meta:
unique_together = ('menuitem', 'user')

class Order(models.Model):
user = models.ForeignKey(User, models.CASCADE)
delivery_crew = models.ForeignKey(
User, on_delete=models.SET_NULL, related_name='delivery_crew', null=True)
status = models.BooleanField(db_index=True, default=0)
total = models.DecimalField(max_digits=6, decimal_places=2)
date = models.DateField(db_index=True)

class OrderItem(models.Model):
order = models.ForeignKey(User, on_delete=models.CASCADE)
menuitem = models.ForeignKey(MenuItem, on_delete=models.CASCADE)
quantity = models.SmallIntegerField()
unit_price = models.DecimalField(max_digits=6, decimal_places=2)
price = models.DecimalField(max_digits=6, decimal_places=2)

class Meta:
unique_together = ('order', 'menuitem')

Код: Выделить всё

Error: django.db.utils.IntegrityError: NOT NULL constraint failed:  LittleLemonAPI_menuitem.category_id
Я пытаюсь добавить пункты меню, но когда я назначаю глубину = 1, возникает ошибка avobe.

Подробнее здесь: https://stackoverflow.com/questions/791 ... how-to-fix
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Ошибка целостности Django: ограничение NOT NULL не выполнено. Как исправить?
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Django IntegrityError: ограничение NOT NULL не выполнено
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Django.db.utils.IntegrityError: ограничение NOT NULL не выполнено: account_account.phone_number
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Django.db.utils.IntegrityError: ограничение NOT NULL не выполнено: account_account.phone_number
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Django.db.utils.IntegrityError: ограничение NOT NULL не выполнено: account_account.phone_number
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»