Como verificar se um FileField foi modificado na administração do Django?
-
06-07-2019 - |
Pergunta
Eu estou tentando fazer um modelo com um arquivo que não deve ser modificado. Mas o comentário do arquivo pode ser.
Aqui está o que eu fiz, mas não podemos modificar o comentário. Como posso testar se um novo arquivo (usando o botão Procurar) como foi enviado e neste caso apenas, criar uma nova instância do modelo? Se nenhum de upload de um novo arquivo, atualizar o comentário.
admin.py
class CGUAdminForm(forms.ModelForm):
class Meta:
model = ConditionsUtilisation
def clean_file(self):
if self.instance and self.instance.pk is not None:
raise forms.ValidationError(_(u'You cannot modify the file. Thank you to create a new instance.'))
# do something that validates your data
return self.cleaned_data["file"]
class CGUAdmin(admin.ModelAdmin):
form = CGUAdminForm
admin.site.register(ConditionsUtilisation, CGUAdmin)
models.py
class ConditionsUtilisation(models.Model):
date = models.DateField(_(u'Date d\'upload'), editable=False, auto_now_add=True)
comment = models.TextField(_(u'Commentaire de modification'))
file = models.FileField(_(u'CGU'), upload_to='subscription/cgu/', storage=CGUFileSystemStorage())
Solução
if 'file' in form.changed_data:
"""
File is changed
"""
raise forms.ValidationError("No, don't change the file because blah blah")
else:
"""
File is not changed
"""
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow