gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:01:50 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com