gpt4 book ai didi

Django "Save as new"并保留图像字段

转载 作者:行者123 更新时间:2023-12-04 04:49:15 25 4
gpt4 key购买 nike

我有一个带有多个 ImageField 的 Django 模型。

在 ModelAdmin 类上我设置了 save_as = True ,这意味着管理页面有一个“另存为新”按钮,它允许复制现有项目并将其另存为新项目。

但是,当使用此按钮时,ImageFields 不会重复,并且在新项目上留空。

查看 POST 请求,我看到这些字段在 post 数据中是空白的。

我想过重写 Model 类的 save 方法,并自己从旧对象中复制图像。但据我所知,我无法判断该对象是否保存为“新的”。我似乎也没有旧元素的 ID,所以我无法从中获取旧图像。

有没有办法让这些图像字段也被复制?

编辑:
根据请求添加了示例代码。

创建了一个只有一个模型的简约应用程序。验证问题仍然存在。

示例模型.py:

from django.db import models

class Person(models.Model):
face_image = models.ImageField(upload_to='images',
null=False,
blank=True)

示例 admin.py:
from django.contrib import admin
from testapp.models import Person

class PersonAdmin(admin.ModelAdmin):
save_as = True

admin.site.register(Person, PersonAdmin)

最佳答案

建立在 this响应,这是实现相同结果的更通用的方法:

from django.core.urlresolvers import resolve
from django.db.models.fields.files import FieldFile

class PersonAdmin(admin.ModelAdmin):
save_as = True

def save_model(self, request, obj, form, change):
# Django always sends this when "Save as new is clicked"
if '_saveasnew' in request.POST:
# Get the ID from the admin URL
original_pk = resolve(request.path).args[0]
# Get the original object
original_obj = obj._meta.concrete_model.objects.get(id=original_pk)

# Iterate through all it's properties
for prop, value in vars(original_obj).iteritems():
# if the property is an Image (don't forget to import ImageFieldFile!)
if isinstance(getattr(original_obj, prop), FieldFile):
setattr(obj,prop,getattr(original_obj, prop)) # Copy it!
obj.save()

这应该适用于任何模型和任何文件类型。它也不需要编辑表单或模板。这是合并拉取请求后不需要的解决方法: https://github.com/django/django/pull/2246 .

关于Django "Save as new"并保留图像字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18577324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com