0

グループを持っていないユーザーとの意見が必要です。でクエリを実行しようとしました .exceptが、多対多フィールドが原因で失敗しました...

私のモデル:

class UserProfile(models.Model):
    user = models.OneToOneField(User, unique=True)
    courses_list = models.ManyToManyField('Course', blank=True)
    group_list = models.ManyToManyField('Group', blank=True)

class Group(models.Model):
    name = models.CharField(max_length=30)
    assignment = models.ForeignKey(Assignment)
    members = models.ManyToManyField(UserProfile, through=UserProfile.group_list.through, blank=True)

class Assignment (models.Model):
    course = models.ForeignKey(Course)

class Course(models.Model):
    subscribed = models.ManyToManyField(UserProfile, through= UserProfile.courses_list.through, blank=True)

したがって、assignment.course.subscribed.allグループを持たない、割り当てにサブスクライブしている(すべて送信する)ユーザーを選択する必要があります(問題は、この割り当てにリンクされているグループのみを処理する必要があることです)

試しgroupless = detailedassignment.course.subscribed.exclude(username = group_list.filter(assignment=detailedassignment).members.username.all())ましたが、まったく機能しません(コードを見ると正常だと思います。)

編集 :

私はある意味で関係を削除しました、今私のモデルは:

My models :

class UserProfile(models.Model):
    user = models.OneToOneField(User, unique=True)

class Group(models.Model):
    name = models.CharField(max_length=30)
    assignment = models.ForeignKey(Assignment)
    members = models.ManyToManyField(UserProfile, blank=True)

class Assignment (models.Model):
    course = models.ForeignKey(Course)

class Course(models.Model):
    subscribed = models.ManyToManyField(UserProfile, blank=True)

私は使用しようとしました:

groupless = detailedassignment.course.subscribed.exclude(user__username__in = Group.objects.filter(assignment=detailedassignment).members.objects.values_list('user__username'))

しかし、私は持っています'QuerySet' object has no attribute 'members'

4

2 に答える 2

1

あなたはuser参照を忘れています。だから私があなたを正しく解釈するなら、あなたは次のようなものが欲しいです-

groupless = detailedassignment.course.subscribed.exclude(user__username__in = group_list.filter(assignment=detailedassignment).members.objects.values_list('user__username'))

またはこれを試してください-

groupless = UserProfile.objects.filter(courses_list__assignment = detailedassignment).exclude(group_list__assignment=detailedassignment)

また、余談ですが、モデルの設計は多少歪んでおり、同じ参照が互いに交差しています。また、(モデルの `Courseのように)後方参照を追加する必要はありません。Djangoは、後方参照の機能を提供します。https://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backwardを参照してください

于 2012-07-26T11:55:35.737 に答える
0

したがって、後方参照が削除されたときrelated_name、ManyToManyFieldとRahulの回答で少し編集してaを使用しました。

groupless = User.objects.filter(course_list__assignment=detailedassignment).exclude(group_list__assignment=detailedassignment)

役に立つ場合は..:D

于 2012-07-26T16:17:50.060 に答える