2010-04-26 49 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)