Django根据模型查询填充选择字段

时间:2010-04-26 14:57:30

标签: django

我有以下型号

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)

当我尝试在host_end上使用foreignkeys初始化表单时,它总是显示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)})

我只想要与该域匹配的区域..并非所有域名。

1 个答案:

答案 0 :(得分: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)