这是我的用户
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True, max_length=255)
mobile = PhoneNumberField(null=True)
username = models.CharField(null=False, unique=True, max_length=255)
full_name = models.CharField(max_length=255, blank=True, null=True)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
这是我的测验模型
class Quiz(Base):
category = models.ForeignKey(Category, related_name='quizzes', on_delete=models.CASCADE)
winners = models.ManyToManyField(User, related_name='quizzes_won')
losers = models.ManyToManyField(User, related_name='quizzes_lost')
我想查询用户未参加的所有测验,因此,赢家和输家都不包含用户ID。我该怎么做呢。抱歉,我是django的新手。
我们可以利用.exclude(..)
这里作为标准的User
在winners
或losers
关系。所以:
from django.db.models import Q
Quiz.objects.exclude(Q(winners=user) | Q(losers=user))
这里Q
[doc]是封装了特定谓词的对象。因此,通过使用“或”运算符,|
我们可以将条件指定为winners
包含user
或loser
包含user
。因此Quiz
,我们排除满足这些条件中至少一个(或两个)的ze。
这样会在查询中产生MySQL后端:
SELECT `quiz`.*
FROM `quiz`
WHERE NOT (
( `quiz`.`id` IN (SELECT U1.`quiz_id` AS Col1
FROM `quiz_winners` U1
WHERE U1.`user_id` = 123)
OR `quiz`.`id` IN (SELECT U1.`quiz_id` AS Col1
FROM `quiz_losers` U1
WHERE U1.`user_id` = 123)
)
)
(123
实际上id
是的user
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句