[英]Django : retrieve data from models
我有一个严重的问题,我需要从一个不相关的模型中检索一个查询集
我的模型:
# problem/models.py
User = get_user_model()
class Problem(models.Model):
name = models.CharField(max_length=50)
description = models.CharField(max_length=1000)
writer = models.ForeignKey(User,models.CASCADE)
score = models.PositiveIntegerField(default=100) # my perfer is PositiveSmallIntegerField
class Submission(models.Model):
submitted_time = models.DateTimeField(auto_now_add=True)
participant = models.ForeignKey(User,related_name="submissions",on_delete=models.CASCADE)
problem = models.ForeignKey(Problem,related_name="submissions",on_delete=models.CASCADE)
code = models.URLField(max_length=200)
score = models.PositiveIntegerField(default=0)
# contest/models.py
class Contest(models.Model):
name = models.CharField(max_length=50)
holder = models.ForeignKey(User, on_delete=models.CASCADE)
start_time = models.DateTimeField()
finish_time = models.DateTimeField()
is_monetary = models.BooleanField(default=False)
price = models.PositiveIntegerField(default=0)
problems = models.ManyToManyField(Problem)
authors = models.ManyToManyField(User, related_name='authors')
participants = models.ManyToManyField(User, related_name='participants')
我试图检索这样的提交查询集:
<QuerySet [<Submission: Submission object (12)>, <Submission: Submission object (6)>, <Submission: Submission object (16)>, <Submission: Submission object (5)>, <Submission: Submission object (11)>, <Submission: Submission object (15)>, <Submission: Submission object (14)>, <Submission: Submission object (4)>, <Submission: Submission object (10)>, <Submission: Submission object (9)>, <Submission: Submission object (3)>, <Submission: Submission object (8)>, <Submission: Submission object (2)>, <Submission: Submission object (13)>, <Submission: Submission object (1)>, <Submission: Submission object (7)>]>
使用竞赛模型的 id ,但我不知道这怎么可能
如果我正确理解了您的问题,那么在您当前的代码中,您尝试做的事情是不可能的。 如果您想拉回由特定Contest
id 过滤的所有Submission
对象,您需要将两者连接起来。
例如,下面是调用应该是什么的示例:
submissions_by_contest = Submission.object.filter(contest.id=123) # or whatever the id/pk field is on Contest
但是,为了使其工作,您必须将Submission
模型修改为如下所示:
from contest.models import Contest
class Submission(models.Model):
submitted_time = models.DateTimeField(auto_now_add=True)
participant = models.ForeignKey(User,related_name="submissions",on_delete=models.CASCADE)
problem = models.ForeignKey(Problem,related_name="submissions",on_delete=models.CASCADE)
code = models.URLField(max_length=200)
score = models.PositiveIntegerField(default=0)
contest = models.ForeignKey(Contest,related_name="submissions")
这会将Submission
模型连接回Contest
作为contest
。
您可能需要根据文件所在的位置以及 pythonic 模块的子目录对其进行一些修改,但它通常应该能让您到达那里。
编辑:(基于回复的上下文)
由于您无法编辑初始代码,因此您将执行以下操作:
您有一个从竞赛 (m2m) 到问题的连接和另一个从提交返回到问题的连接。 这就是你将使用的。
首先,您有比赛名称或 ID 或一些标识符。 你会得到那个对象。
contest = Contest.objects.get(name="contest name") # or id
然后,您将获取contest.problems
中的所有提交。问题。 就像是:
submissions_by_contest = Submission.objects.filter(problem__in=contest.problems)
语法可能略有不同,但这是您要使用的连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.