use*_*381 5 django django-forms django-orm
我希望有一个表单来添加,编辑和删除多个关系的值,使用指定的中间表,就像我从Django的管理TabularInline表单中获得的那样.有没有办法做到这一点?我没有在Django的文档中找到它.
我创建了一个用于编辑UserProfile的表单,并希望能够使用UserProfile_Language(语言和熟练程度)添加,编辑和删除多对多.我如何为此制作表格?如何在视图中处理此问题?
我的模型如下:
class Language(models.Model):
LANGUAGE_ENGLISH = 1
LANGUAGE_FRENCH = 2
LANGUAGE_CHOICES = (
(LANGUAGE_ENGLISH, 'English'),
(LANGUAGE_FRENCH, 'French')
)
language = models.SmallIntegerField(choices=LANGUAGE_CHOICES)
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
languages = models.ManyToManyField(Language, null=True, blank=True, through='UserProfile_Language')
class UserProfile_Language(models.Model):
FLUENT = 1
OK = 2
PROFICIENCY_CHOICES = (
(FLUENT, 'Fluent'),
(OK, 'Okay')
)
userprofile = models.ForeignKey(UserProfile)
language = models.ForeignKey(Language)
proficiency = models.SmallIntegerField(choices=PROFICIENCY_CHOICES)
Run Code Online (Sandbox Code Playgroud)
我假设你的意思是在前端而不是在管理中。我相信您可以使用表单集来完成此操作。(http://docs.djangoproject.com/en/dev/topics/forms/formsets/)。您将为直通表创建一个表单以在表单集中使用。
另外,您可能已经简化了发布模型,但如果语言模型实际上只是一个选择字段,为什么不将 language 和 userprofile_language 合并为一个呢?您可以用选择字段替换外键并获得相同的行为。这将使您的显示更容易。(忽略这一点,语言实际上有更多领域)