2009-02-02 9 views
1

J'ai essayé de comprendre cela pendant des heures sur quelques jours, et je n'arrive pas à le faire fonctionner. J'ai été partout. Je vais continuer à essayer de le comprendre, mais espérais une solution plus rapide. J'utilise le magasin de données App Engine + Django. En utilisant une requête dans une vue et des formulaires personnalisés, j'ai pu obtenir une liste pour le formulaire, mais je n'ai pas été en mesure de poster. J'ai essayé de comprendre comment ajouter dynamiquement les choix dans le formulaire Django ... J'ai essayé plusieurs façons sans succès. Aidez-moi!Demander une liste distincte de choix pour le formulaire Django avec la banque de données App Engine

Voici les deux modèles. Je voudrais obtenir une liste distincte de address_id à afficher dans le champ de localisation dans InfoForm. Ces champs pourraient (et devraient peut-être) être nommés de la même façon, mais je pensais que ce serait plus facile s'ils étaient nommés différemment.

class Info(db.Model): 
    user = db.UserProperty() 
    location = db.StringProperty() 
    info = db.StringProperty() 
    created = db.DateTimeProperty(auto_now_add=True) 
    modified = db.DateTimeProperty(auto_now=True) 

class Locations(db.Model): 
    user = db.UserProperty() 
    address_id = db.StringProperty() 
    address = db.StringProperty() 

class InfoForm(djangoforms.ModelForm): 
    info = forms.ChoiceField(choices=INFO_CHOICES) 
    location = forms.ChoiceField() 
    class Meta: 
      model = Info 
      exclude = ['user','created','modified'] 
+0

Est-ce que « une liste distincte de ADDRESS_ID » signifie « une liste de (adresse union ADDRESS_ID) distincte de l'emplacement » modèle? Si oui, veuillez mettre à jour votre question pour préciser que vous avez deux champs que vous utilisez pour valider le champ d'emplacement sur un formulaire. –

Répondre

1

Je ne suis pas familier avec App Engine Datastore, mais je devine que vous voulez sans doute faire quelque chose le long de ces lignes:

class InfoForm(djangoforms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(InfoForm, self).__init__(*args, **kwargs) 
     choices = [(r.id, r.info) for r in Info.objects.filter(...)] 
     self.fields['info'] = ChoiceField(choices=choices) 

En attribuant info dynamiquement, alors vous exclure cette ligne de votre classe InfoForm:

info = forms.ChoiceField(choices=INFO_CHOICES) 
Questions connexes