Django - 列 "imageLink" 中的空值违反了非空约束

Django - Null value in column "imageLink" violates not-null constraint

我一直在尝试设置将表单(旨在上传图片)上传到数据库的可能性,该数据库链接到列表中的其他数据,但每次我尝试 运行它,它不会忽略假定为图片的空值。我花了整整一天半的时间阅读并试图解决这个问题,但是关于这个主题的文档并不多。我是否缺少需要将文件上传到的位置 and/or 如果列表中没有添加照片,有没有办法忽略空值?

错误信息:

IntegrityError at /createproduct/
null value in column "imageLink" violates not-null constraint
DETAIL:  Failing row contains (81, Comedy, Comic, DC, 5, Engels, 5, Henk, haHAA, null, 808, 2000-04-02).

表单片段 1:

class PRegistrationForm(ModelForm):

ProductsEntry = Products(prodNum=products.id, prodName=products.prodName, prodPrice=products.prodPrice,
                                prodStock=products.prodStock)
ProductsEntry.save()

ProdData = ProductDetails(prodNum=products(prodNum=products.id), genre=products.genre,
                                            type=products.type, publisher=products.publisher,
                                            totalPages=products.totalPages, language=products.language,
                                            rating=products.rating, author=products.author, desc=products.desc,
                                            imageLink=products.imageLink, pubDatum=products.pubDatum)
ProdData.save()

if commit:
    products.save()

return products

表单片段 2:

class ProductDetails(forms.Form):
    products_prodName = forms.CharField(required=True, max_length=200)
    products_prodPrice = forms.DecimalField(required=True, max_digits=5, decimal_places=2)
    products_prodStock = forms.IntegerField(required=True, max_value=5000, min_value=1)
    products_genre = forms.CharField(required=False, max_length=15)
    products_type = forms.CharField(required=False, max_length=15)
    products_publisher = forms.CharField(required=True, max_length=30)
    products_totalPages = forms.IntegerField(required=True, max_value=2000, min_value=1)
    products_language = forms.CharField(required=False, max_length=25)
    products_rating = forms.IntegerField(required=False, max_value=5, min_value=1)
    products_author = forms.CharField(required=True, max_length=30)
    products_desc = forms.CharField(required=True, max_length=2000)
    products_imageLink = forms.FileField(allow_empty_file=True, required=False)
    products_pubDatum = forms.DateField(required=False)

    def __init__(self, *args, **kwargs):
        super(ProductDetails, self).__init__(*args, **kwargs)
        self.fields['products_prodName'].label = "Titel:"
        self.fields['products_prodPrice'].label = "Prijs:"
        self.fields['products_prodStock'].label = "Quantiteit:"
        self.fields['products_genre'].label = "Genre:"
        self.fields['products_type'].label = "Type:"
        self.fields['products_publisher'].label = "Uitgever:"
        self.fields['products_totalPages'].label = "Bladzijden:"
        self.fields['products_language'].label = "Taal:"
        self.fields['products_rating'].label = "Score:"
        self.fields['products_author'].label = "Schrijver:"
        self.fields['products_desc'].label = "Beschrijving:"
        self.fields['products_imageLink'].label = "Foto:"
        self.fields['products_pubDatum'].label = "Uitgeefdatum:"

型号:

class Products(models.Model):
    class Meta:
        verbose_name_plural = "Products"

    prodNum = models.IntegerField(primary_key=True)
    prodName = models.CharField(max_length=200)
    prodPrice = models.DecimalField(max_digits=5, decimal_places=2)
    prodStock = models.IntegerField()

    def __str__(self):
        return (str(self.prodNum))

class ProductDetails(models.Model):
    class Meta:
        verbose_name_plural = "Product details"

    prodNum = models.ForeignKey(Products, db_column='prodNum')
    genre = models.CharField(max_length=50)
    type = models.CharField(max_length=50, default="Comic")
    publisher = models.CharField(max_length=50)
    totalPages = models.IntegerField()
    language = models.CharField(max_length=25, default="Engels")
    rating = models.IntegerField()
    author = models.CharField(max_length=50)
    desc = models.TextField()
    imageLink = models.CharField(max_length=300)
    pubDatum = models.CharField(max_length=30, default="1 januari, 1990")

您还没有将 null= True 添加到您的字段,默认为 False

如文档中所述

null If True, Django will store empty values as NULL in the database. Default is False.

所以这应该有效:

imageLink = models.CharField(null=True, max_length=300)