我正在開發一個 Django 應用程式。我有兩個與問題相關的模型:
class Quiz(models.Model):
"""
Represents a Quiz for a `Module`.
It will have a `name`
"""
name = models.CharField(max_length=200)
user = models.ManyToManyField('cme.Bussines', related_name='quizes', through='UserQuiz', through_fields=('quiz', 'user'))
def __str__(self) -> str:
return f'{self.name}'
class Trio(models.Model):
"""
Represents the content for a Module.
Each `Trio` will have, as it's name says, 3 content fields, plus the
`Module` it belongs to.
It will have a `file`, a `video` (which will be a URL to a YT video), and a `quiz`
(which will be key to `Quiz`)
"""
file = models.FileField(upload_to='legacy/classes/', max_length=254)
quiz = models.ForeignKey(Quiz, on_delete=models.SET_NULL, related_name='trios', null=True, blank=True)
video = models.URLField()
module = models.ForeignKey(Module, on_delete=models.CASCADE, related_name='trios')
user = models.ManyToManyField('cme.Bussines', related_name='trios', through='UserTrio', through_fields=('trio', 'user'))
def __str__(self) -> str:
return f'Trio {self.id} de {self.module}'
我想查詢所有Quiz不在ZESquiz的領域Trio。有沒有辦法做到這一點?
uj5u.com熱心網友回復:
是的,您可以查詢:
Quiz.objects.filter(trios=None)
這將進行 LEFT OUTER JOIN 并僅保留Quiz沒有相關Trio物件的zes 。
uj5u.com熱心網友回復:
您可以查詢所有Quiz其物件id是出現在任何Trio物件:
Quiz.objects.exclude(id__in=Trio.objects.values("quiz_id"))
您還可以進一步細化查詢。例如,假設你希望所有Quiz不特定的物件所指的子集的Trio物件,你可以這樣做在你的排除式添加過濾器,是這樣的:
Quiz.objects.exclude(id__in=Trio.objects.filter(...).values("quiz_id"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/378045.html
