簡體   English   中英

根據另一個ModelMultipleChoice中先前選擇的選項,在ModelMultipleChoice中顯示不同的QuerySet

[英]Show different QuerySet in a ModelMultipleChoice depending in previously selected option in another ModelMultipleChoice

我正在嘗試構建一個簡單的Django webApp,該服務器將文檔存儲在服務器中,並在文檔和項目之間建立關系。

這是我的模型:

class Project(models.Model):
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete='models.CASCADE', related_name='project_members')
    project_members = models.ManyToManyField(settings.AUTH_USER_MODEL)
    name = models.CharField(max_length=20, blank=False, null=False, unique=True)

    def __str__(self):
        return str(self.name)

class Document(models.Model):
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    path = models.FileField(upload_to='documents/')
    name = models.CharField(max_length=50)
    folders = models.ManyToManyField(Folder)
    projects = models.ManyToManyField(Project)


    def __str__(self):
        return str(self.name)

這是表格的代碼:

class RemoveFileProject(forms.Form):
    project_name = forms.ModelMultipleChoiceField(queryset=Project.objects.none())
    document_name = forms.ModelMultipleChoiceField(queryset=Document.objects.none(), widget=FilteredSelectMultiple("Documentos", is_stacked=False))

    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user', None)
        super(RemoveFileProject, self).__init__(*args, **kwargs)
        if user:
            proyectos = Project.objects.filter(project_members=user)
            print(proyectos)
            self.fields['project_name'] = forms.ModelMultipleChoiceField(queryset=proyectos)
            docs = Document.objects.filter(projects=proyectos).select_related()
            self.fields['document_name'] = forms.ModelMultipleChoiceField(queryset=docs, widget=FilteredSelectMultiple("Documentos", is_stacked=False))

現在我有兩個問題:

  1. 我收到“ ValueError:用於精確查找的QuerySet值必須限制為使用切片的一個結果”。 我知道這是因為proyectos是QuerySet,它們的行為方式獨特,但是我很難掌握如何在Django中進行“ join”。

  2. 我只想顯示屬於每個項目的文檔,因此,如果選擇項目“ proyect 1”,則第二個ModelMultipleChoiceFied應該只顯示與“項目1”相關的文檔。

提前致謝

我建議您查看Django Autocomplete Light(DAL)庫,尤其是小部件的forward屬性( https://django-autocomplete-light.readthedocs.io/en/master/tutorial.html?highlight=forward#filtering-基於表單中其他字段的值的結果 )。 非常適合您的要求!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM