python - 在 Django 中使用表单

标签 python django django-forms

我正在创建一个网站,有两种形式。我拥有的数据库有作者和标题。我想要做的是,当我单击选择字段中的作者时,我希望过滤标题,以便用户只能选择这些标题。我该怎么做?

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())

此表单将为 authorarticle 字段提供一个选择小部件。它可以让您选择其中之一。它将所有作者和所有文章呈现为模板。如果您有一些条目也没关系,但如果条目太多就会出现问题。

下一部分是过滤文章选择。这个问题的答案有点难。因为这取决于您的项目要求。

  • 您可能需要编写一些 JavaScript 来过滤选择字段 根据作者。
  • 您可能想要为以下字段添加验证器: 相互依赖。
  • 您可能不想加载所有文章 提前并且可能想使用 Ajax 技术来加载文章 属于某个作者。
  • 您可能想要使用 FormWizard 将表单拆分为多个页面/步骤。
  • ...

关于python - 在 Django 中使用表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27511039/

相关文章:

mysql - Django 2.0 - 使用转储数据中的固定装置进行测试给出 utf8mb4 编码错误

python - ModelForm 和 ModelSelect2Widget (django-select2)

python - PyCUDA + numpy,以及一般字符串处理

django - allauth with crispyform : signup not working

python - 如何在 xlsxwriter 中将新工作表添加到工作簿

django - 一个 Django 项目的多个域托管

django - 在 Django 中,如何使用 ModelForm 将多个表单字段作为值列表保存到单个模型字段中?

python - 模型表单中的 Django M2M 字段?

python - 通过稍微更改我为线性回归编写的代码来获得曲线拟合的二次多项式

python - 指定的列表理解