我正在创建一个网站,有两种形式。我拥有的数据库有作者和标题。我想要做的是,当我单击选择字段中的作者时,我希望过滤标题,以便用户只能选择这些标题。我该怎么做?
class ArticleForm(forms.ModelForm):
author = forms.ModelMultipleChoiceField(queryset=Article.objects.all())
title = forms.ModelMultipleChoiceField(queryset=Article.objects.filter(author=author))
class Meta:
model = Article
fields = ('author','title')
当我单击作者姓名时,标题仍然为空白。我该怎么办?
下面是我的模型
class Article (models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=200)
最佳答案
首先您需要文章和作者之间的关系。如果您有这样的模型:
class Author(models.Model):
name = models.CharField(max_length=200)
class Article(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author)
一篇文章
属于一个作者
,并且一个作者
可以拥有许多文章
。
基于Author
模型的modelForm允许您添加(或修改)作者。基于 Article
的 modelForm 允许您添加(或修改)文章。这一切都非常有用,但在这种情况下则不然。我们需要一个带有 ModelChoiceFields 的范式选择作者和文章:
class ArticleForm(forms.Form):
author = forms.ModelChoiceField(queryset=Author.objects.all())
article = forms.ModelChoiceField(queryset=Article.objects.all())
此表单将为 author
和 article
字段提供一个选择小部件。它可以让您选择其中之一。它将所有作者和所有文章呈现为模板。如果您有一些条目也没关系,但如果条目太多就会出现问题。
下一部分是过滤文章选择。这个问题的答案有点难。因为这取决于您的项目要求。
- 您可能需要编写一些 JavaScript 来过滤选择字段 根据作者。
- 您可能想要为以下字段添加验证器: 相互依赖。
- 您可能不想加载所有文章 提前并且可能想使用 Ajax 技术来加载文章 属于某个作者。
- 您可能想要使用 FormWizard 将表单拆分为多个页面/步骤。
- ...
关于python - 在 Django 中使用表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27511039/