Ajuda de administração constitui erro de validação
-
07-07-2019 - |
Pergunta
Eu sou muito novo para Django, estou tendo alguns problemas com a validação formas no módulo de administração, mais especificamente com o aumento exceções na ModelForm. Eu pode validar e manipular dados em métodos limpas mas não consigo levantar quaisquer erros. Sempre que incluem qualquer aumento declaração eu recebo este erro "objeto 'NoneType' tem nenhum atributo 'ValidationError'". Quando eu remover o tudo funciona aumento de peça bem.
Em seguida, se eu reimporte django.forms (dentro método limpo) com um alias diferente (por exemplo, a partir de formas de importação django como blahbalh), em seguida, eu sou capaz de mensagens levantam usando blahblah.ValidateException.
Todas as dicas e sugestões sobre como fazer tal coisa corretamente?
Aqui está um exemplo do que eu estou fazendo no Admin.py:
admin.py
de Django formulários de importação de proj.models importar * De admin django.contrib import
classe FontAdminForm (forms.ModelForm):
class Meta:
model = Font
def clean_name(self):
return self.cleaned_data["name"].upper()
def clean_description(self):
desc = self.cleaned_data['description']
if desc and if len(desc) < 10:
raise forms.ValidationError('Description is too short.')
return desc
classe FontAdmin (admin.ModelAdmin):
form = FontAdminForm
list_display = ['name', 'description']
admin.site.register (Font, FontAdmin)
- Obrigado, A
Solução
Você problema pode estar no * importação.
from proj.models import *
Se proj.models contém quaisquer formas variáveis ??chamado (incluindo alguns de importação módulo como "de Django formulários de importação), poderia trucidar sua importação inicial de:
from django import forms
Eu explicitamente importar de proj.models, por exemplo.
from proj.models import Font
Se isso não funcionar, veja se existem outras variáveis ??nome de "formas" que poderiam estar brincando com o seu escopo.
Você pode usar introspecção para ver o que "formas" é. Dentro de seu método clean_description:
print forms.__package__
Meu palpite é que não vai ser "Django" (ou retornará um erro, indicando que não é definitivamente django.forms).