Django заполнить поле выбора на основе запроса модели - PullRequest
3 голосов
/ 26 апреля 2010

У меня есть следующая модель

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 .., она всегда показывает все записи в таблице 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 Ответ

2 голосов
/ 26 апреля 2010

Исходные данные для поля выбора или внешнего ключа используются для определения того, что выбрано в этом поле, а не того, какие доступны опции. Если вы хотите определить список параметров, вам нужно переопределить метод __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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...