1

保存した後、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

あなたがアイデアを持っているなら..:)

4

1 に答える 1

1

あなたが求めていることを確認するため。コースのあるフォームを表示して、コースにそのコースがあるユーザーを選択できるようにしたいですか?

モデルに存在しないModelFormのフィールドを適切に使用することはできません。

モデルを変更し、ManyToManyFieldが両方向を指すようにしてから、次を使用することができます。

class AddSubscibeForm(forms.ModelForm):
    class Meta:
        model = Course
        fields = ('userProfiles')

Coursesこれは、と呼ばれるにManyToManyFieldがあると仮定して機能しますuserProfiles

ManyToManyFieldを双方向で機能させるには、このチケットを確認してください。

私はこれを試していませんが、うまくいくはずだと思います。

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

上記の両方が機能するはずです。どちらの場合も、データベース内の何も変更する必要はありません。

于 2012-07-16T20:44:19.357 に答える