2010-04-26 2 views
3

나는 다음과 같은 모델을 가지고장고는 선택 필드 모델 쿼리를 기반으로 채 웁니다있는

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)}) 
의 모든 항목을 표시하는 양식을 초기화하기 위해서 시도

도메인과 일치하는 영역 만 원하면됩니다. 모든 도메인이 아닙니다.

답변

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)