我希望在保存后将MultipleChoiceField作为初始数据加载到具有多种关系的字段中。
我的课程
class Course(models.Model):
name = models.CharField(max_length=30)
description = models.TextField(max_length=30)
owner = models.ForeignKey(User)
class UserProfile(models.Model):
user = models.OneToOneField(User, unique=True)
status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='student')
courses_list = models.ManyToManyField(Course, blank=True)
我的表单
class AddSubscibeForm(forms.ModelForm):
userprofile_set = forms.ModelMultipleChoiceField(initial = User.objects)
class Meta:
model = Course
我的观点
def addstudents(request, Course_id):
editedcourse = Course.objects.get(id=Course_id) # (The ID is in URL)
form = AddSubscibeForm(instance=editedcourse)
return render(request, 'addstudents.html', locals())
实际上,我有一个有用户的多个列表,但我没有在'courses_list'字段中有该课程的用户列表..
我可以通过以下方式访问用户的cours_list:
> editedcourse = Course.objects.get(id=Course_id)
> subscribed = editedcourse.userprofile_set.all()
> subscribed.user.username
如果您有任何想法......:)
答案 0 :(得分:1)
确认你在问什么。您希望能够查看带有课程的表单,并选择哪些用户在其课程中拥有该课程?
您将无法正确使用模型中不存在的ModelForm中的字段。
您可以做的是更改模型并使ManyToManyField指向两个方向,然后使用以下内容:
class AddSubscibeForm(forms.ModelForm):
class Meta:
model = Course
fields = ('userProfiles')
假设您在Courses
中有一个名为userProfiles
的ManyToManyField,这将有效。
要让ManyToManyField双向工作,请查看this ticket。
我没试过,但我认为它应该有用。
class Test1(models.Model):
tests2 = models.ManyToManyField('Test2', blank=True)
class Test2(models.Model):
tests1 = models.ManyToManyField(Test1, through=Test1.tests2.through, blank=True)
或者这个:
class User(models.Model):
groups = models.ManyToManyField('Group', through='UserGroups')
class Group(models.Model):
users = models.ManyToManyField('User', through='UserGroups')
class UserGroups(models.Model):
user = models.ForeignKey(User)
group = models.ForeignKey(Group)
class Meta:
db_table = 'app_user_groups'
auto_created = User
以上两点都应该有效。在这两种情况下,您都不必更改数据库中的任何内容。