Установить исходное имя файла в качестве поля заголовка по умолчанию в Django Model - PullRequest
0 голосов
/ 04 июля 2018

Я использую сайт администратора Django для управления загрузками. Я бы знал, возможно ли установить исходное имя файла в качестве заголовка по умолчанию для класса Image.

Models.py:

class Multimedia(models.Model):
    id_multimedia = models.AutoField(primary_key=True)
    titulo = models.CharField(max_length=80, blank=True, null=True)
    descripcion = models.TextField(blank=True, help_text='Descríbeme...')
    path = models.FilePathField(path='media', allow_folders=True)
    album = models.ForeignKey(Album, on_delete=models.CASCADE)
    fecha_creacion = models.DateTimeField(auto_now_add=True)
    keyword = models.ManyToManyField('Keyword', help_text="Selecciona las palabras clave para etiquetar.")

    def __str__(self):
        return self.titulo


class Imagen(Multimedia):
    #titulo = models.CharField(max_length=100)
    image_width = models.PositiveSmallIntegerField(default=640)
    image_height = models.PositiveSmallIntegerField(default=480)
    fichero_imagen = models.ImageField(verbose_name='Archivo de imagen',
                                       upload_to='files/img',
                                       width_field='image_width',
                                       height_field='image_height')
    thumbnail = ImageSpecField(source='fichero_imagen',
                               processors=[ResizeToFill(600, 300)],
                               format='JPEG',
                               options={'quality': 60})

Я хочу загрузить изображение и оставить поле заголовка пустым вместо названия. Затем установите Multimedia.titulo в качестве исходного имени файла для загрузки. Я слышал о заранее заполненных полях, но я не знаю, возможно ли это. Заранее спасибо.

1 Ответ

0 голосов
/ 23 августа 2018

Я делал что-то подобное и обнаружил, что, как объясняется здесь , когда вы загружаете файл, он сохраняется в dict ' request.FILE ', который возвращает UploadedFile объекты. Вы можете получить имя файла, открыв его атрибут name (request.FILE['YourModelImageField'].name).

Вы могли бы иметь что-то вроде этого:

#model.py
class YourModel(models.Model):
    name = models.CharField(max_length=20)
    image = models.ImageField() # In this case we will have request.FILE['image'].name

#forms.py
class YourModelForm(ModelForm):
    class Meta:
        model = YourModel
        fields = ['image'] 

#views.py
def add_model(request):
    form = YourModelForm(request.POST, request.FILES)
    uploaded_file=request.FILES
    if form.is_valid():
       model_instance = form.save(commit=False)
       model_instance.name=uploaded_file['image'].name
       model_instance.save()
       return render(request, context={'form': form})

Я на самом деле не эксперт по django, поэтому, если кто-то может увидеть ошибку или лучший способ сделать это, пожалуйста, дайте мне знать. Однако это сработало для меня, я надеюсь, что это поможет вам.

...