Ошибка целостности: сбой ограничения NOT NULL, не идентифицирующий внешний ключ

#python #django #django-rest-framework

#python #django #django-rest-framework

Вопрос:

Это мои модели.

 class Category(models.Model):
    name = models.CharField(max_length=255, primary_key=True)
    description = models.TextField(null=True)

    def __str__(self):
        return self.name

class SubCategory(models.Model):
    name = models.CharField(max_length=255, primary_key=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    description = models.TextField(null=True)

    def __str__(self):
        return self.name

def product_display_image_path(instance, filename):
    return f"products/{instance.pid}/{filename}/"

def product_image_path(instance, filename):
    return f"products/{instance.product.pid}/{filename}/"

class Product(models.Model):
    pid = models.UUIDField(default=uuid.uuid4, primary_key=True)
    name = models.TextField()
    description = models.TextField()
    display_image = models.ImageField(
        upload_to=product_display_image_path,
        default='products/image_unavailable.png'
    )
    artist = models.ForeignKey(User, on_delete=models.CASCADE)
    category = models.ForeignKey(Category, on_delete=models.PROTECT)
    subcategory = models.ForeignKey(SubCategory, on_delete=models.PROTECT)
    stock_left = models.IntegerField(default=0)
    price = models.CharField(max_length=255)
    click_count = models.BigIntegerField(default=0)
    purchase_count = models.BigIntegerField(default=0)

    def __str__(self):
        return self.name

    class Meta:
        ordering = ['-click_count']
 

Это мое мнение.

 class ProductCreateView(CreateAPIView):
    queryset = Product.objects.all()
    permission_classes = [IsAuthenticated, IsArtist]
    serializer_class = ProductSerializer
    parser_classes = [FormParser, MultiPartParser, JSONParser]

    def create(self, request, *args, **kwargs):
        request.data['artist'] = request.user.id
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        headers = self.get_success_headers(serializer.data)
        return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
 

Это запрос, который я делаю:
Запрос Postman
Это ошибка:
ошибка целостности
Я постоянно получаю эту ошибку IntegrityError at /store/create/product/ NOT NULL constraint failed: products_product.category_id (название моего приложения — products). Я очистил всю базу данных и повторил попытку. Кажется, ничего не работает. PS. У меня уже есть имена категорий «аксессуары» и созданная подкатегория с именем «группы». Я не знаю, почему новый продукт, который я хочу создать, не может выбрать категорию. Может кто-нибудь, пожалуйста, помочь мне с этим?

Комментарии:

1. Можете ли вы также предоставить свои сериализаторы? Вероятно, вы неправильно создаете вложенные ресурсы.

2. @SyntacticFructose, который выполнил эту работу за меня, я пропустил их в сериализаторе. Спасибо. Я отмечу ваш ответ правильно, если вы опубликуете его в качестве ответа ниже, если пункты помогут вам. Очень признателен.

Ответ №1:

Я пропустил эти поля в сериализаторе. Ответил @Syntactic Fructose в комментариях. Спасибо вам, сообщество.