我正在尝试添加来自FileField或URL CharField(URL)的图像,但我遇到了一些问题。 第一>;URL中的文件已正确上载,模型中的名称和图像已成功创建,但。。图像不正确(请参阅下面的代码) 第二>;如果选择了文件,一切都是完美的
我从Name中获取POST值,对其进行slugify,并在两种情况下使用它以扩展名更改图像的名称。。。 当我选择一个url。。。模型中图像的结果是:halo/.jpg。。。我只是想从刚从url上传的文件中获取值
换句话说:如果URL字段已填充。。。我使用这个URL而不是文件,如果不是,我使用文件字段来上传
谢谢你的帮助
视图.PY
def createHalo(request):
form = HaloForm()
if request.method == 'POST':
form = HaloForm(request.POST, request.FILES)
if form.is_valid():
document = form.save(commit=False)
document.name = request.POST['name']
img_url = request.POST['url']
if img_url != "":
print(img_url)
photo = Halo() # set any other fields, but don't commit to DB (ie. don't save())
filename = urlparse(img_url).path.split('/')[-1]
extension = filename.split(".")[-1].lower()
name = "halo/" + slugify(request.POST['name']) + "." + extension
# content = urllib.request.urlretrieve(img_url)
response = requests.get(img_url)
if response.status_code == 200:
photo.image.save(name, ContentFile(response.content), save=False)
print(name)
# photo.image.name = name
# photo.save()
document.save()
# Halo.save()
else:
document.save()
message = "Image ["+request.POST['name'] + "] ajoutée avec succès !"
messages.success(request, message)
return redirect('games:create_halo')
context = {'form': form}
return render(request, 'games/createHalo.html', context)
型号.PY
class Halo(models.Model):
objects = models.Manager()
name = models.CharField(max_length=200, db_index=True)
image = models.ImageField(upload_to='', storage=fs)
# Methode d'enregistrement dans la base ...
def save(self, *args, **kwargs):
# On check si Object Mot déjà créé
# On test ensuite si l'image de la base est identique à celle envoyée par le formulaire
# Si différent on supprime l'ancien fichier pour uploader le nouveau lors de la sauvegarde du modèle
try:
this = Halo.objects.get(pk=self.pk)
if this.image != self.image:
this.image.delete()
except:
this = self
extension = self.image.name.split(".")[-1].lower()
self.image.name = "halo/" + slugify(self.name) + "." + extension
# Si le fichier existe on le renomme avec la valeur du nouveau mot (cas ou seul le mot change ... pas le fichier)
if os.path.exists(settings.MEDIA_ROOT + "/" + this.image.name):
os.rename(settings.MEDIA_ROOT + "/" + this.image.name, settings.MEDIA_ROOT + '/halo/' + slugify(self.name) + "." + extension)
super(Halo, self).save(*args, **kwargs)
FORMS.PY
class HaloForm(ModelForm):
image = forms.ImageField(widget=forms.FileInput, required=False)
url = forms.CharField(max_length=255, required=False)
class Meta:
model = Halo
fields = ('name', 'image', 'url')
我终于自己找到了;) 我刚刚修改了VIEWS.PY来重新组织和更改一些变量。 也许还有另一种更有效的解决方案,但这一种有效;)
相关问题 更多 >
编程相关推荐