我已在 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/