python - Django - ManyToManyField 未显示在表单中

标签 python django django-models django-forms

我已在 UserProfile 中定义了 language_tuples = models.ManyToManyField(LanguageTuple)。当普通用户想成为翻译者时,应填写此字段。因此,他应该能够选择所需数量的语言元组 - 逐个语言。

编辑:感谢尚王,现在我可以选择多个 LanguageTuple 但我无法在表单内创建新的 LanguageTuple 对象。

class Language(models.Model):
    shortcut = models.CharField(max_length=40)
    name = models.CharField(max_length=40)

    def __str__(self):
        return self.name


class LanguageTuple(models.Model):
    language_from = models.ForeignKey(Language, related_name='language_from', null=True)
    language_to = models.ForeignKey(Language, related_name='language_to', null=True)

    def __str__(self):
        return '{} to {}'.format(self.language_from, self.language_to)

因此,我们假设数据库中已有多个 Language 对象,但没有 LanguageTuple 实例。我希望用户能够构建自己的元组(他想要多少就多少)。因此,如果有语言 CZ、EN、GE、SK - 他可以构建例如这些元组:CZ-EN、EN-CZ、GE-CZ、SK-GE 等 - 选择元组后,这些元组将在数据库内创建如果不存在,则作为常规 LanguageTuple 实例。

问题是表单渲染时内部没有表单字段。不知道该怎么办...如您所见,我已将字段 - language_tuples 添加到表单中。

class TranslatorRegistrationForm(forms.Form):
    IBAN = forms.CharField(max_length=40,required=True)
    first_name = forms.CharField(max_length=40,required=True)
    last_name = forms.CharField(max_length=40,required=True)


    class Meta:
        model = UserProfile
        fields = (
        'first_name','last_name','IBAN','language_tuples'
        )

最佳答案

我已经在评论中提到的一个问题是,TranslatorRegistrationForm 需要 forms.ModelForm,否则 django 将无法识别您想要显示的所有字段。

如果您希望用户从 language_tuples 中进行选择并创建新对,则将有两种形式。一个用于您现有的表单,另一个是模型 LanguageTuple 的表单。您需要在模板中显示这两个表单,以便人们可以从列表 language_tuples 中进行选择,或者填写 LanguageTuple 表单。

现在请注意,您需要一些逻辑来检测用户是否选择了现有的 language_tuple 还是尝试使用新创建的 LanguageTuple。将所有内容保存到数据库之前需要执行一些额外的步骤,但这应该很简单。

关于python - Django - ManyToManyField 未显示在表单中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36359321/

相关文章:

python - Django、Gunicorn 和设置目录

django - 如何在谷歌云数据存储中创建一个新模型(种类)

python - 查询中带有年份的算术表达式的问题

database - Django 的复合/复合主/唯一键

python - 如何在 python 中创建一个简单的程序来测试我在 Glade 中创建的界面?

python - 如何返回或打印作为两个属性之间的数学函数的属性? Python

python - 过去一天登录的用户数

python - 在 Tornado 中使用 Django ORM, "syncdb"不起作用

python - 抽象 Django 类中的多个外键字段

python - 如何在python中读取条形码?