我怎么能不把数据放在 Django 的 ImageField 中?

How can I not put data in ImageField in Django?

我要在图像域中存储图像。但是我不想打印出错误,即使我没有在 ImageField 中放入图像。也就是说,我想离开ImageField null.I 也试过null=True 和blank=True 来做这件事,但是没有正常工作。我应该怎么做才能让它成为可能?这是我的代码。

class post (models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=40)
    text = models.TextField(max_length=300)
    image1 = models.ImageField(blank=True, null=True)
    image2 = models.ImageField(blank=True, null=True)
    image3 = models.ImageField(blank=True, null=True)
    image4 = models.ImageField(blank=True, null=True)
    image5 = models.ImageField(blank=True, null=True)

要正确使用 ImageField(),您需要使用 pip install Pillow

安装 Pillow

最好制作一个 Image 模型并使用 Post 模型中的 ForeignKey 引用它,如下所示:

from django.db import models


class Image (models.Model):
    title = models.CharField(max_length=40)
    text = models.TextField(max_length=300)
    image = models.ImageField(blank=True, null=True)
   
    def __str__(self):
        return self.title

    class Meta:
        db_table = 'image'


class Post (models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    images = models.ForeignKey(Image, on_delete=models.CASCADE, related_name='posts')
    title = models.CharField(max_length=40)
    text = models.TextField(max_length=300)

    def __str__(self):
        return self.title

    class Meta:
        db_table = 'post'

Django 会尝试将图像上传到媒体根目录,因此将 MEDIA_URL 添加到 settings.py 的底部,如下所示:

# settings.py 

MEDIA_URL = 'media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

不要忘记清除数据库并重做迁移,如果需要,您应该能够将 ImageField 保持为空