我在language_tuples = models.ManyToManyField(LanguageTuple)
中定义了UserProfile
。当普通用户想成为翻译者时,应填写此字段。所以他应该能够选择尽可能多的语言元组 - 语言语言。
LanguageTuples
,但我无法在表单中创建新的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
的实例。我希望user
能够构建自己的元组(尽可能多)。因此,如果有语言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'
)
答案 0 :(得分:2)
我在评论中已经提到过forms.ModelForm
需要TranslatorRegistrationForm
的一个问题,否则django将无法识别您要显示的所有字段。
如果您希望用户从language_tuples
中选择以及创建新对,那么它将是2种形式。一个用于现有表单,另一个用于模型LanguageTuple
的表单。您需要在模板中显示两个表单,以便人们可以从列表language_tuples
中选择或填写LanguageTuple
的表单。
现在请注意,您需要一些逻辑来检测用户是选择了现有的language_tuple
还是尝试使用新创建的LanguageTuple
。在将所有内容保存到数据库之前,这是一些额外的步骤,但它应该是直接的。