J'essaie de déplacer toutes les validations liées à la logique métier vers des modèles, au lieu de les laisser dans des formulaires. Mais ici, j'ai une situation difficile, pour laquelle j'aime consulter la communauté SO.Est-ce que les modèles django offrent quelque chose de similaire aux formulaires 'clean_ <fieldname>()?
Dans ma SignupForm (un formulaire de modèle), j'ai la validation spécifique au champ suivante pour m'assurer que l'email d'entrée n'existe pas déjà.
def clean_email(self):
email = self.cleaned_data['email']
if ExtendedUser.objects.filter(email=email).exists():
raise ValidationError('This email address already exists.')
return email
Si je devais passer cette validation aux modèles, selon le document officiel, je le mettrais dans clean()
du modèle correspondant, ExtendedUser
. Mais le document mentionne également les éléments suivants:
Toute exception ValidationError soulevées par Model.clean() seront stockés une erreur clé spéciale clé de dictionnaire, NON_FIELD_ERRORS, qui est utilisé pour les erreurs qui sont liées à l'ensemble modèle au lieu de un champ
spécifique qui signifie, avec clean()
, je ne peux pas associer les erreurs soulevées à partir avec des domaines spécifiques. Je me demandais si les modèles offrent quelque chose de similaire aux formes clean_<fieldname>()
. Si non, où mettriez-vous cette logique de validation et pourquoi?
Isn » t cette logique liée à la forme si? Pourquoi pensez-vous qu'il serait préférable pour elle de vivre dans le modèle? Ce serait l'utilisation prévue de modelforms dans django à mon avis. – vascop
@VascoP - Je veux juste centraliser toute ma logique métier dans les modèles. Pour l'un, c'est plus organisé en termes de design. Et conceptuellement, je pense qu'il est logique pour la validation de vivre dans des modèles. En outre, il a l'avantage de partager la même validation lorsque j'ai plusieurs formulaires de modèle basés sur le même modèle. – tamakisquare
Vous pouvez également hériter d'une forme de modèle plus générale associée à un modèle donné et avoir des sous-modèles pour chaque forme différente. – vascop