@JonGalt

Фильтрация значений в форме Django?

Добрый день. Вопрос как во вьюхе можно отфильтровать значения выпадающего списка. Именно надо чтобы при создании "документа" при выборе "организации" были организации только из того же проекта, в котором создается документ.
models
class Project(models.Model):
    short_name = models.CharField(verbose_name=u'краткое название', max_length=16)
    full_name = models.TextField(verbose_name=u'полное название', blank=True)

class Company(models.Model):
    inn = models.PositiveIntegerField(validators=[MaxValueValidator(9999999999)], blank=True, verbose_name=u'ИНН', unique=True)
    ogrn = models.PositiveIntegerField(validators=[MaxValueValidator(9999999999)], blank=True, verbose_name=u'ОГРН', unique=True)
    name = models.CharField(max_length=64, verbose_name=u'Название компании')

class ProjectCompany(models.Model):
    project = models.ForeignKey(Project, null=True)
    company = models.ForeignKey(Company)
    company_role = models.ForeignKey(CompanyRole)
    date_log = models.DateTimeField(verbose_name=u'Дата регистрации', auto_now_add=True)

class Documents(models.Model):
    document_name = models.CharField(max_length=32, verbose_name=u'Название документа')
    project = models.ForeignKey(Project, null=True, blank=True)
    organization = models.ForeignKey(Company, null=True, blank=True)

Forms
class DocumentForm(forms.ModelForm):
    class Meta:
        model = Documents
        fields = ('__all__')

view
def project_document_add(request, id):
    project = Project.objects.get(id=id)
    if request.POST:
        form = DocumentForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('projectinfo', id)
    context = {'form': DocumentForm({'project': project}), 'project': project}
    return render(request, 'documents/projectdocumentadd.html', context)
  • Вопрос задан
  • 2202 просмотра
Решения вопроса 1
@JonGalt Автор вопроса
javedimka: Спасибо
сделал так
class DocumentForm(forms.ModelForm):
    def __init__(self, project, *args, **kwargs):
        super(DocumentForm, self).__init__(*args, **kwargs)
        self.fields['organization'].queryset = Company.objects.filter(projectcompany__project=project)

    class Meta:
        model = Documents
        fields = ('__all__')
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Crazy_Garry
Так вроде.
def project_document_add(request, id):
    project = Project.objects.get(id=id)
    if request.POST:
        form = DocumentForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('projectinfo', id)
    org = ProjectCompany.objects.filter(project=project)
    context = {
        'form': DocumentForm(initial={'project': project, 'organization': org}),
        'project': project
    }
    return render(request, 'documents/projectdocumentadd.html', context)


upd:
Я же QuerySet с ProjectCompany выбрал... Надо достать из него Organization...
Так может.
org = [company for company in ProjectCompany.objects.filter(project=project)]
    context = {
        'form': DocumentForm(initial={'project': project, 'organization': org}),
        'project': project
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы