integerfield initial form example decimalfield combofield choices python django validation django-forms django-validation

python - initial - Django ModelChoiceField: ¿utilizas algo que no sea id?



forms.select django (3)

ModelChoiceFields está destinado a ser utilizado para seleccionar entre una selección de instancias de modelos existentes. Esto casi siempre está mejor representado por algún tipo de campo Seleccionar.

Dicho eso, ¿realmente tienes un FK de dirección a postal_code como estás implicando? ¿Qué almacena en una tabla PostalCode para justificar la tabla adicional que deberá unirse para cada consulta relacionada con la dirección?

Para la mayoría de los casos, postal_code debería ser simplemente un CharField y en ese caso, si desea validar que el valor es válido, puede usar el atributo de choices con una lista de códigos postales válidos. Tenga en cuenta que mantener una lista de códigos postales válidos a mano es una gran molestia.

Si realmente tiene una tabla PostalCode y cree que es una buena idea (que en algunos casos podría ser), puede considerar utilizar el código postal como la clave principal en lugar de la autoincrementación predeterminada, ya que es necesariamente única, hace que sus datos sean más exportables. y resuelve tu problema con la validación

Supongamos que tengo una tabla de address y tiene un campo postal_code - ModelChoiceField no me permite usar algo que no sea PK para validar la existencia correcta. ¿Cuál sería el camino a seguir? Entrada normal y uso clean_*() ?


Si postal_code es una clave foránea para un modelo de PostalCode que contiene códigos postales válidos, solo usaré un CharField y luego haré una limpieza como sugirió. Mi método de limpieza se vería así:

def clean_postal_code(self): try: code = PostalCode.objects.get(code_field=self.data[''postal_code'']) except: raise forms.ValidationError("Please enter a valid postal code") return code


¿Qué pasa con to_field_name ? No estoy seguro si está documentado en cualquier lugar, pero puede encontrarlo fácilmente entre los ModelChoiceField constructor de ModelChoiceField : https://github.com/django/django/blob/master/django/forms/models.py . Se usa para filtrar el conjunto de preguntas de campo.

Por ejemplo:

articles = ModelChoiceField(queryset=Articles.objects.all(), to_field_name=''slug'')