Django Admin - Validando inlines junto com os principais modelos
Tenho um requisito de validação bastante complexo e não consigo que o administrador do Django o atend
Tenho um modelo principal django.contrib.auth.models.User
) e vários modelos que se parecem com
class SomeProfile(models.Model):
user = models.OneToOneField(User)
# more fields
Quero verificar se, se o usuário pertence a algum grupo, ele possui o perfil correspondente. Portanto, se o usuário estiver no grupoFoo
ele deve ter um não vazioFooProfile
.
Onde coloco essa regra de validação? Não posso colocá-lo no modelo. Na verdade, o usuário ainda não foi criado quando o formulário foi validado, portanto, não consigo acessar seus grupos. Então, eu preciso recorrer à validação de formulário. Isto é o que eu coloquei:
class UserAdminForm(forms.ModelForm):
"""
A custom form to add validation rules which cannot live in the
model. We check that users belonging to various groups actually
have the corresponding profiles.
"""
class Meta:
model = User
def clean(self):
# Here is where I would like to put the validation
class FooInline(admin.TabularInline):
model = FooProfile
max_num = 1
class UserAdmin(admin.ModelAdmin):
model = User
form = UserAdminForm
inlines = [FooInline]
admin.site.register(User, UserAdmin)
Meu problema é que dentroUserAdminForm.clean()
Não tenho acesso aos dados publicados dentro das linhas. Para saber se o usuário está no grupo Foo, inspecionandoself.cleaned_data['groups']
, mas não tenho como saber se umFooProfile
foi transmitido.
Como verifico este requisito de validação?
Editar
Eu tento explicar melhor o problema, porque houve uma má interpretação em uma respost
Eu tenho um problema ao criar um novo usuário. O fato é que os perfis são obrigatórios (de acordo com os grupos). Digamos que um administrador crie um novo usuário; então tenho que adicionar linhas no formulário de administração para os vários GroupProfile
Como verifico se os perfis corretos não são nulos? Não consigo usar oclean()
método doUser
model, porque não consigo verificar a que grupos o usuário pertence: ele ainda não foi criad
Só consigo acessar as informações sobre os grupos noclean()
método do formulário - mas não tenho as informações sobre os perfis, pois essas informações são enviadas através de linha