2013-05-10 1 views
1

Je crée une application de travail en ligne pour une entreprise avec plusieurs emplacements. J'aimerais permettre au demandeur de sélectionner des cases à cocher qui représentent tous les magasins auxquels il aimerait faire une demande (elles pourraient être multiples). Je hésite à coder en dur ces à des fins d'évolutivité, donc je l'avais espéré créer 2 modèles (j'ai plus que cela, mais pour cet exemple ce sont les 2 seuls qui sont pertinents):Créer un MultipleChoiceField en utilisant des lignes d'un autre modèle,

demandeur

class Applicant(models.Model): 
    name = models.CharField(max_length=200) 
    city = models.CharField(max_length=200) 
    state = models.CharField(max_length=200) 
    zip = models.CharField(max_length=200) 
    social_security_number = models.CharField(max_length=200) 
    phone = models.CharField(max_length=200) 
    alt_phone = models.CharField(max_length=200, blank=True) 
    us_citizen = models.BooleanField() 
    committed_felony = models.BooleanField() 
    is_16 = models.BooleanField() 
    has_drivers_license = models.BooleanField() 
    is_disabled = models.BooleanField() 
    prev_employed = models.BooleanField() 
    felony_explanation = models.TextField(blank=True) 
    disabled_explanation = models.TextField(blank=True) 
    prev_employment_manager = models.CharField(max_length=200, blank=True) 
    prev_employment_year = models.CharField(max_length=4, blank=True) 
    skills = models.TextField() 
    was_completed = models.BooleanField(default=False) 

    def __unicode__(self): 
     return self.name 

Magasin

class Store(models.Model): 
    code = models.CharField(max_length=10) 
    description = models.CharField(max_length=200) 
    city = models.CharField(max_length=20) 
    state = models.CharField(max_length=20) 

    def __unicode__(self): 
     return self.description 

Je voudrais (je pense) que d'ajouter un MultipleChoiceField dans le modèle demandeur, qui crée des choix de toutes les instances de magasin (sur e pour chaque rangée). Jusqu'à présent, je l'ai essayé dans la classe candidate:

def get_stores(): 
     self.stores = Store.objects.all() 

mais n'a pas pu (pour autant que je peux dire) saisir les instances de magasin comme je l'avais espéré. Voici quelques questions que j'ai:

  • Est-il même possible de référencer un autre modèle comme ça?
  • Est-ce que le fait de référencer le modèle Store du modèle demandeur est le bon début pour créer plusieurs cases à cocher permettant à un demandeur de sélectionner tous les magasins auxquels il s'applique (et permettre à la liste de changer dynamiquement)?
  • est un MultipleSelectField le meilleur moyen de le faire une fois que j'ai tiré toutes les instances de magasin?

Répondre

1

Cela ressemble au cas d'utilisation canonique pour ManyToManyField.

class Store(models.Model): 
    ... 

class Applicant(models.Model): 
    name = models.CharField(max_length=200) 
    ... 
    was_completed = models.BooleanField(default=False) 

    stores = ManyToManyField(Store, related_name='applicants') 

Lorsque vous affichez cette forme dans un champ, il doit utiliser automatiquement un MultipleSelectField

REF: https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/

+0

travaillé comme un charme - la documentation est en noir et blanc, je ne ai jamais trouvé cette section . – drewwyatt

Questions connexes