2010-04-26 6 views
3

je le modèle suivantDjango POPULATE champ de sélection basé sur le modèle requête

class DNS(models.Model): 
    domain = models.ForeignKey(Domain) 
    host_start = models.CharField(max_length=150, blank=True, null=True) 
    type = models.SmallIntegerField(max_length=1, default=0, choices=DNS_CHOICE) 
    value = models.SmallIntegerField(max_length=3, default=0, blank=True, null=True) 
    ip = models.IPAddressField(blank=True, null=True) 
    host_end = models.ForeignKey("DNS", blank=True, null=True) 
    other_end = HostnameField(max_length=150, blank=True, null=True) 
    created = models.DateTimeField(auto_now_add=True) 
    sticky = models.BooleanField(default=0) 
    other = models.BooleanField(default=0) 

Lorsque je tente d'initialiser une forme avec juste ForeignKeys sur host_end .. il montre toujours toutes les entrées de la table DNS

domain = Domain.objects.get(id=request.GET['domain'], user=request.user, active=1) 
form = DNSFormCNAME(initial={'ip': settings.MAIN_IP, 'type': request.GET['type'], 'host_end': DNS.objects.filter(domain=domain)}) 

Je veux juste les zones qui correspondent à ce domaine .. pas tous les domaines.

Répondre

2

Les données initiales d'un champ de choix ou de clé étrangère sont utilisées pour déterminer ce qui est sélectionné dans ce champ, et non les options disponibles. Si vous souhaitez déterminer la liste des options, vous devez remplacer la méthode __init__ du formulaire et le faire à cet endroit.

class DNSFormCNAME(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     self.domain = kwargs.pop('domain', None) 
     super(DNSFormCNAME, self).__init__(*args, **kwargs) 
     if self.domain: 
      self.fields['host_end'].queryset = DNS.objects.filter(domain=domain) 
Questions connexes