Аргумент obj возвращается со значением "None" при развертывании проекта в облаке
Я разместил свой сайт на namecheap.com и когда я пытаюсь загрузить любое изображение, я встречаю эту ошибку:
UnicodeEncodeError: кодек 'ascii' не может кодировать символы в позиции 38-43: ordinal not in range(128)
У меня ушло несколько часов, пока я не нашел вопрос и проблему в этом коде:
class MultipleImageManaged(admin.ModelAdmin):
list_display = ('id', 'images')
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj=None, **kwargs)
form.base_fields['images'].widget.attrs = {
'multiple': 'multiple'
}
return form
def save_model(self, request, obj, form, change):
for data in request.FILES.getlist('images'):
cat_name = Category.objects.get(name=obj.category)
if obj.album:
album_name = Album.objects.filter(category__name=cat_name).get(name=obj.album)
else:
album_name = None
Gallery.objects.create(images=data, category=cat_name, album=album_name)
когда я вывел аргумент "obj" в методе get_form(), я понял, что этот аргумент возвращает значение "None", зная это, этот аргумент работает на моем localhost.
На самом деле, я не знаю, почему он так работает, но сейчас я пытаюсь придерживаться другого подхода, я не уверен, что этот подход будет работать правильно, но мне нужна помощь в этом. так что сейчас я пытаюсь использовать сигналы вместо этого, и вот мой новый подход:
from django.contrib import admin
from .models import Gallery, Album, Category
from django.db.models.signals import pre_save
from django.dispatch import receiver
class MultipleImageManaged(admin.ModelAdmin):
list_display = ('id', 'images')
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj=None, **kwargs)
form.base_fields['images'].widget.attrs = {
'multiple': 'multiple'
}
return form
class SaveModel(MultipleImageManaged):
def save_model(self, request, obj, form, change):
self.form = self.get_form(request, obj=None)
self.request = request
return self.create_model()
# return super().save_model(request, obj, form, change)
def create_model(self):
@receiver(pre_save, sender=Gallery)
def trigger(sender, instance, **kwargs):
for data in self.request.FILES.getlist('images'):
print("Image Data: ", data)
cat_name = Category.objects.get(name=instance.category)
if instance.album:
album_name = Album.objects.filter(category__name=cat_name).get(name=instance.album)
else:
album_name = None
Gallery.objects.create(images=data, category=cat_name, album=album_name)
return trigger(sender, instance, **kwargs)
admin.site.register(Gallery, SaveModel)
может ли кто-нибудь помочь мне достичь цели моей задачи?
спасибо заранее