2010-04-26 48 views
3

我有以下型號Django的填充基於模型的查詢語句select場

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) 

當我嘗試初始化一個形式只是foreignkeys上host_end ..它總是顯示在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)}) 
所有條目

我只想與該域名匹配的區域..並非所有的域名。

回答

2

選擇或外鍵字段的初始數據用於確定在該字段中選擇的內容,而不是可用選項的內容。如果要確定選項列表,則需要覆蓋表單的__init__方法並在此處執行。

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)