Django IntegrityError:唯一约束失败

2024-04-26 04:18:13 发布

您现在位置:Python中文网/ 问答频道 /正文

如果一个productbase_image=True,我试图阻止某个插入,但是在base_image=False时允许任意多的插入

我用django.db.models.UniqueConstraint实现了它,一切正常但在django管理面板中,我得到的不是添加视图中的红色警报,而是IntegrityError

这是我的模型(media.py):

from django.db import models
from apiv1.models.products import Product

class Media(models.Model):
    """ Media table, contains images file names """

    product = models.ForeignKey(Product, related_name='media', on_delete=models.CASCADE, blank=False)
    file_name = models.CharField(max_length=191, blank=False, unique=True)
    base_image = models.BooleanField(blank=False)

    class Meta:

        constraints = [
            models.UniqueConstraint(
                fields=[
                    'product',
                ],
                condition=models.Q(base_image=True),
                name='unique_base_image'
            ),
        ]

    def __str__(self):
        return self.file_name

这就是错误:

IntegrityError at /admin/apiv1/media/add/

UNIQUE constraint failed: apiv1_media.product_id

Request Method:     POST
Request URL:    http://127.0.0.1:8000/admin/apiv1/media/add/
Django Version:     3.1.4
Exception Type:     IntegrityError
Exception Value:    

UNIQUE constraint failed: apiv1_media.product_id

Exception Location:     /Users/sal/devel/artiashco_tipnety_cbir/env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py, line 413, in execute
Python Executable:  /Users/sal/devel/artiashco_tipnety_cbir/env/bin/python
Python Version:     3.7.3
Python Path:    

['/Users/sal/devel/artiashco_tipnety_cbir',
 '/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python37.zip',
 '/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7',
 '/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/lib-dynload',
 '/Users/sal/devel/artiashco_tipnety_cbir/env/lib/python3.7/site-packages']

Server time:    Wed, 30 Dec 2020 12:58:16 +0000

期望值:django管理面板中的红色引导警报


Tags: djangonameimagefalsebasemodelsliblibrary

热门问题