Получение запроса в admin.py - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть такая модель:

class Item(models.Model):
    code = models.CharField(max_length=200, unique=True)
    barcode = models.CharField(max_length=300)
    desc = models.CharField('Description',max_length=500)
    display_desc = models.CharField('Description',max_length=500,
                                    blank=True, null=True)
    price = models.FloatField()
    discountable = models.BooleanField(blank=True, default=False)
    image_path = models.CharField(max_length=300,unique=True, blank=True, null=True)    

    def __unicode__(self):
        return self.code + ' : ' + self.desc

Но, к сожалению, я не хочу сохранять изображение элемента в базе данных, вместо этого я хочу сохранить путь к изображению на сервере в image_path column.

Итак, я создал специальный admin.py для этого объекта, чтобы можно было редактировать / вставлять объект через модуль администрирования Django.В результате ниже приведен настроенный файл admin.py

class ItemAdminForm(forms.ModelForm):
    file_upload = forms.FileField(required=False)

    class Meta:
        model = Item

    def __init__(self, *args, **kwargs):
        super(ItemAdminForm, self).__init__(*args,**kwargs)

        #if kwargs.has_key('instance'):
        #    instance = kwargs['instance']
        #    self.initial['file_upload'] = instance.file_upload

    def handle_uploaded_file(f):
        destination = open('D:/Project/pensel/penselshop/static/picture', 'wb+')
        for chunk in f.chunks():
            destination.write(chunk)
        destination.close()
        return f.name

    def save(self,commit=True):
        name = None
        extension = None
        #error here! How could I get the request?
        miniform = ItemAdminForm(request.POST, request.FILES)
        if miniform.is_valid():
            name = handle_uploaded_file(request.FILES['file_upload'])    
            extension = name.split('.')[1]
        model = super(ItemAdminForm, self).save(commit=False)
        model.image_path = '/static/picture/' + model.code + extension        

        if commit:
            model.save()

        return model

Однако во время обработки функции save() я заметил, что при получении запроса произошла ошибка.Как я могу получить запрос, чтобы я мог получить файл?Я заметил, что запрос автоматически добавляется в views.py, но не admin.py

1 Ответ

1 голос
/ 29 февраля 2012
Поля

Django ImageField и FileField фактически не сохраняют изображение в базе данных.Все, что хранится в базе данных, это путь, которым вы можете управлять сами.Фактический файл изображения хранится в файловой системе.Так что я не уверен, почему вы идете ко всем этим неприятностям ...?

Но чтобы ответить на ваш вопрос о том, как получить request в админе, вы можете переопределить ModelAdmin.save_model() .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...