Dire che ho una tabella address
e ha un campo postal_code
- ModelChoiceField non mi consente di utilizzare qualcosa di diverso dai PK per convalidare l'esistenza corretta? Quale sarebbe la strada da percorrere? Ingresso normale e uso clean_*()
?Django ModelChoiceField - usa qualcosa di diverso dall'ID?
risposta
ModelChoiceFields devono essere utilizzati per selezionare tra una scelta di istanze di modello esistenti. Questo è quasi sempre meglio rappresentato da una qualche forma di campo Seleziona.
Detto questo, hai davvero un FK dall'indirizzo a CAP che stai insinuando. Cosa stai memorizzando su una tabella PostalCode per giustificare la tabella aggiuntiva che dovrà essere aggiunta per ogni query relativa all'indirizzo?
Per la maggior parte dei casi, il codice postale deve essere semplicemente un CharField e in tal caso, se si desidera verificare che il valore sia valido, è possibile utilizzare l'attributo choices
con un elenco di codici postali validi. Tieni presente che mantenere una lista di codici postali validi a mano è una seccatura enorme.
Se hai davvero una tabella PostalCode e pensi che sia una buona idea (che in alcuni casi potrebbe essere) potresti prendere in considerazione l'utilizzo del codice postale come chiave primaria piuttosto che l'autoincremento predefinito poiché è necessariamente univoco, rende i tuoi dati sono più esportabili e risolvono il problema con la convalida.
Se postal_code
è una chiave esterna a un modello di PostalCode che contiene codici postali validi, vorrei utilizzare solo un CharField e quindi effettuare una pulizia come suggerito. Il mio metodo clean sarebbe il seguente:
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
Che dire di to_field_name
? Non sono sicuro che sia documentato ovunque, ma lo puoi trovare facilmente tra i parametri del costruttore ModelChoiceField
: https://github.com/django/django/blob/master/django/forms/models.py. È usato per filtrare il campo queryset.
Ad esempio:
articles = ModelChoiceField(queryset=Articles.objects.all(),
to_field_name='slug')
Funziona perfettamente. – user240515
Attenzione, in 1.4 (non ho ancora provato 1.5, scusa) è rotto quando usato con l'argomento 'instance', dato che' model_to_dict' usa forzatamente PK (in realtà, 'valore_per_oggetto '). Per ovviare a ciò si deve fare 'YourForm (..., instance = foo, initial = {" bar ": foo.bar.slug})'. Vedi l'implementazione di 'BaseModelForm .__ init__' per i dettagli. – drdaeman
@drdaeman [Indeed] (https://code.djangoproject.com/ticket/20202) – valtron
- 1. Utilizzare il metodo diverso da __unicode__ in ModelChoiceField Django
- 2. Django, ModelChoiceField() e valore iniziale
- 3. Django: ModelChoiceField remove default --------- choice
- 4. Django - Come funziona ModelChoiceField di queryset?
- 5. Django ModelChoiceField non ha un tasto più
- 6. Forme di Django: come creare dinamicamente le etichette ModelChoiceField
- 7. Flask - nested rest api - usa qualcosa di diverso da methodview o ho fatto un cattivo design?
- 8. ModelChoiceField, rimuovendo la scelta vuoto
- 9. è sempre richiesto ModelChoiceField?
- 10. Non usa Interface Builder comprarmi qualcosa?
- 11. Cambia Django ModelChoiceField per mostrare i nomi completi degli utenti anziché i nomi utente
- 12. Usa diverso file .ini per alembic.ini
- 13. Crea GNU usa un compilatore diverso
- 14. Django ModelChoiceField: il filtraggio della query e l'impostazione valore predefinito come oggetto
- 15. SortedList indicizzati da qualcosa di diverso la chiave
- 16. Posso sviluppare per Android in qualcosa di diverso da Java?
- 17. .NET HttpListener problema prefisso con qualcosa di diverso localhost
- 18. Come registrare qualcosa di diverso da Linear PCM su iPhone
- 19. Usa 'now' in django blocktrans?
- 20. Usa Django pyodbc Problema SQLSERVER
- 21. Come si usa MultiWidget di Django?
- 22. Come ottenere istanze ModelChoiceField nel modello
- 23. come si usa get_context_data con TemplateView in Django
- 24. Usa un nome file diverso per npm di "package.json"
- 25. Usa i commenti django-contrib (l'app) in nuovi progetti Django?
- 26. caching queryset alberghi per ModelChoiceField o ModelMultipleChoiceField in una forma Django
- 27. Esiste qualcosa di simile a "rake routes" in django?
- 28. Usa HTML5 appCache con pagina dinamica Django
- 29. Cosa si usa per `related_name` in Django?
- 30. Django: usa una classe personalizzata per request.user?
dipende da come la nave relazione è impostato, per default il suo con il '' primary_key' del modello postal_code'. Puoi fornire maggiori dettagli come il tuo 'indirizzo' e i relativi modelli' postal_code'. Un 'ModelChoiceField' per impostazione predefinita crea un menu a discesa con opzioni come istanze esistenti del modello correlato. – Pannu