Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
Python Django:在其他应用程序中使用ImageFields?_Python_Django_Django Models - Fatal编程技术网

Python Django:在其他应用程序中使用ImageFields?

Python Django:在其他应用程序中使用ImageFields?,python,django,django-models,Python,Django,Django Models,我有一些上传图片的应用程序。现在几乎相同的代码在每个应用程序中多次出现,我希望从名为images的应用程序加载图像。是否可以连接其他应用程序,以便它们使用app1[images]ShareImage类的ImageFields 如果没有,我如何使用image_resize方法和两个@receiver函数,以便多个应用程序可以使用它们,而我只有一个代码: 我以前试过遗传,但我无法逃脱 我还尝试通过导入将ImageFields导入到另一个类中 附录1: 导入操作系统 从io导入字节io 从PIL导入图

我有一些上传图片的应用程序。现在几乎相同的代码在每个应用程序中多次出现,我希望从名为images的应用程序加载图像。是否可以连接其他应用程序,以便它们使用app1[images]ShareImage类的ImageFields

如果没有,我如何使用image_resize方法和两个@receiver函数,以便多个应用程序可以使用它们,而我只有一个代码:

我以前试过遗传,但我无法逃脱

我还尝试通过导入将ImageFields导入到另一个类中

附录1:

导入操作系统 从io导入字节io 从PIL导入图像 从django.db导入模型 从django.dispatch导入接收方 从django.core.files.base导入内容文件 from.storage导入覆盖存储 类ShareImagemodels。模型: image=models.ImageField 将_上传到='images/', 冗长的, 存储=覆盖存储空间, 缩略图=models.ImageField 将_上传到='images/', 可编辑=假, 存储=覆盖存储空间, def saveself,*args,**kwargs: 如果不是os.path.existsself.image.path而不是self.images\u调整大小: 引发异常“错误:未创建缩略图” 超级共享图像,自我保存*args,**kwargs def图像大小自动调整: 尺寸=288162 image=image.openself.image image.thumbnailsize,image.ANTIALIAS 名称,扩展名=os.path.splitextself.image.name 防止django错误地创建新文件夹 name=os.path.basenamename extension=extension.lower 文件名=名称+“\u缩略图”+扩展名 如果扩展名在['.jpg','.jpeg']中: 文件扩展名='JPEG' elif扩展=='.png': 文件扩展名='PNG' elif扩展=='.gif': 文件扩展名='GIF' 其他: 引发异常“错误:不支持文件扩展名” 温度=字节 image.savetemp,文件扩展名 温度seek0 如果不是os.path.existsself.image.path: 自我保存 文件名,ContentFiletemp.read,save=False 返回真值 @receivermodels.signals.post_delete,发送方=ShareImage def auto_delete_图像_在_delete实例上,**kwargs: 如果instance.image: 如果os.path.isfileinstance.image.path: os.removeinstance.image.path 如果instance.缩略图: 如果os.path.isfileinstance.缩略图.path: os.removeinstance.thumbnail.path @receivermodels.signals.pre_save,sender=ShareImage def auto_delete_image_on_changeinstance,**kwargs: 如果不是instance.pk: 返回错误 尝试: old_image=ShareImage.objects.getpk=instance.pk.image old_thumb=ShareImage.objects.getpk=instance.pk.thumbnail 除ShareImage.DoesNotExist外: 返回错误 new_image=instance.image new_thumb=instance.thumb 如果是旧的_图像!=新图片: 如果os.path.isfileold_image.path: os.removeold_image.path 如果老大拇指新拇指: 如果os.path.isfileold\u thumb.path: os.removeold_thumb.path 示例app2:

导入操作系统 从io导入字节io 从PIL导入图像 从django.db导入模型 从django.dispatch导入接收方 从django.core.files.base导入内容文件 from.storage导入覆盖存储 类Logomodels。模型: title=models.CharFieldmax\u length=100,unique=True,verbose\u name='Titel' slug=型号。SlugFieldmax_长度=100,unique=真 created=models.dateTimeFieldDauto\u now\u add=True,verbose\u name='Erstellt' updated=models.dateTimeFieldDauto\u now=True,verbose\u name='Aktualisiert' image=models.ImageFieldupload_to='website/header/images/', 详细的\u name='Bild',存储=覆盖存储 缩略图=models.ImageFieldupload_to='website/header/images/', 可编辑=假,存储=覆盖存储 public=models.booleanfieldwerbose_name='Öffentlich' 类元: 排序=['-更新'] 详细名称='Logo' 详细名称复数='Logos' 定义自身: 返回自己的标题 您可以将ShareImage设置为一个,并从中创建其他类的子类。例如:

class ShareImage(models.Model):
   ...
   class Meta:
        abstract = True


class Logo(ShareImage):
   ...
这样,Logo类将具有图像和缩略图字段。但这不会触发信号

另外,还有另一种方法,将ShareImage添加到徽标中:


这样,ShareImage删除应该会触发这些信号。

第一种解决方案的工作原理与您所说的相同。这对我帮助很大。非常感谢。对于OneToOneField,只有在AdminPanel中才能将其上传到point ShareImage上,然后使用徽标选择它,对吗?因此,在徽标下直接上传是不可能的?不可能在其他应用程序中使用这些信号?您可以为这些应用程序创建新的信号。还是哟 u可以覆盖基本抽象模型的delete,但不确定它是否会触发信号。
class Logo(models.Model):
    image = models.OneToOneField(ShareImage)
    ...

    def delete(self, *args, **kwargs):
        self.image.delete()
        return super(Logo, self).delete(*args, **kwargs)