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

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top