Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 具有多个字段的查询_Django_Many To Many - Fatal编程技术网

Django 具有多个字段的查询

Django 具有多个字段的查询,django,many-to-many,Django,Many To Many,我需要与没有任何组的用户进行查看。我尝试使用进行查询。除了之外,但由于有太多字段,所以查询失败 我的模型: class UserProfile(models.Model): user = models.OneToOneField(User, unique=True) courses_list = models.ManyToManyField('Course', blank=True) group_list = models.ManyToManyField('Group',

我需要与没有任何组的用户进行查看。我尝试使用
进行查询。除了
之外,但由于有太多字段,所以查询失败

我的模型:

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
send all),这些用户没有任何组(问题是我只需要处理链接到此作业的组)

我尝试过
groupless=detailedassignment.course.subscribed.exclude(username=group\u 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'对象没有属性'members'

您忘记了
用户
引用。如果我能正确地理解你,你会想要-

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)

另一方面,您的模型设计看起来有些偏斜,相同的引用彼此交叉。而且不需要添加反向引用(比如在model`Course中)。Django为您提供了向后引用的功能。请参见

因此,当向后引用被删除时,我在我的ManyToManyField和Rahul的答案中使用了一个相关的名称,只需稍加编辑:

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

如果有用的话是的,我也不喜欢,但我有一个问题,这是一个解决办法(我非常同意)。真的谢谢!对于信息,第二个是完美的!您不需要在第二次查询结束时使用
all()
,因为已经使用了
filter()
exclude()
。我已经编辑,删除了反向引用,但它不再起作用:/