Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将图像名称保存到数据库中-Django_Django_Database - Fatal编程技术网

将图像名称保存到数据库中-Django

将图像名称保存到数据库中-Django,django,database,Django,Database,我在Django网站上有以下班级模式: class Buy(models.Model): category = models.ForeignKey(Category, related_name='sell', on_delete=models.CASCADE) title = models.CharField(max_length=100) image = models.FileField() image2 = models.FileField(blank=Tru

我在Django网站上有以下班级模式:

class Buy(models.Model):
    category = models.ForeignKey(Category, related_name='sell', on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    image = models.FileField()
    image2 = models.FileField(blank=True)
    description = models.CharField(max_length=300)
    date = models.DateField(default=timezone.now)
    buy_price = models.DecimalField(max_digits=6, decimal_places=2)
    sell_price = models.DecimalField(max_digits=6, decimal_places=2)
    seller = models.ForeignKey(Seller, on_delete=models.PROTECT)
    showcase = models.BooleanField(default=False)
如您所见,我存储的照片文件有两个字段:image和image2。但现在我的客户要求我添加更多照片。我的疑问是:

  • 我是否应该继续向此类添加新字段,例如image3、image4、image5等?我看到的问题是:不是每个记录都会有这么多照片,而且大多数照片都会变成“空的”
  • 我应该只上传新照片而不将它们的名字保存到数据库中吗?这样,新照片应该遵循与图像类字段相关的名称。我的意思是,unique_photo_1.jpg放在image字段中,unique_photo_2.jpg不保存到数据库中,但与这个字段以及unique_photo_3.jpg相关
  • 最佳做法是什么

    谢谢大家!

    关于#1,最佳实践是遵循原则,创建一个单独的
    图像
    模型,该模型与您的
    购买
    模型相关。如果您预计图像可能会在多个
    Buy
    模型实例中重用,请使用多对多关系;否则,请使用多对一(即
    ForeignKey
    )。这意味着从您的
    购买
    模型中删除
    图像
    图像2
    ,然后创建例如:

    class Image(models.Model):
        image = models.FileField()
        image_type = models.CharField()
        buy = models.ForeignKey(Buy, on_delete=models.PROTECT)
    
    所谓#2,如果您的意思是考虑跳过使用
    FileField
    ImageField
    来编写代码来搜索某些存储空间中的文件,那么这听起来不是一个好主意,因为这样会将文件(元数据)数据与数据库的其余内容分离。使用
    FiledField
    /
    ImageField
    还可以更轻松地使用AWS S3等存储后端。

    在#1上,最佳做法是遵循原则,创建一个单独的
    图像
    模型,该模型与您的
    购买
    模型相关。如果您预计图像可能会在多个
    Buy
    模型实例中重用,请使用多对多关系;否则,请使用多对一(即
    ForeignKey
    )。这意味着从您的
    购买
    模型中删除
    图像
    图像2
    ,然后创建例如:

    class Image(models.Model):
        image = models.FileField()
        image_type = models.CharField()
        buy = models.ForeignKey(Buy, on_delete=models.PROTECT)
    
    所谓#2,如果您的意思是考虑跳过使用
    FileField
    ImageField
    来编写代码来搜索某些存储空间中的文件,那么这听起来不是一个好主意,因为这样会将文件(元数据)数据与数据库的其余内容分离。使用
    FiledField
    /
    ImageField
    还可以更轻松地使用AWS S3等存储后端