class Task(models.Model):
subject = models.CharField(max_length=256)
description = models.TextField(max_length=1024)
reward = models.PositiveIntegerField()
begin_date = models.DateField()
number_of_people = models.PositiveIntegerField(default=1)
class TaskDetail(models.Model):
user = models.ForeignKey(User, related_name='tasks')
task = models.ForeignKey(Task, related_name='tasks')
这是我设计的一个简单的任务分配系统模型。 我有一个问题。我尝试制作一个用户报告,其中包括用户已完成的任务数量。但我不知道如何进行ORM查询。
users = User.objects.all
有谁知道如何解决这个问题? THX
答案 0 :(得分:0)
无需在related_name
模型中为user
列添加TaskDetail
列。
使用foreign_key
,无需构建其他查询。您可以使用链概念:
users = User.objects.all()
task_details = TaskDetail.objects.filter(user=users)
for task_detail in task_details:
subject = task_detail.task.subject
答案 1 :(得分:0)
我们假设您正在尝试计算id=1
用户已完成的任务。
the_user = User.objects.filter(id=1) # Does not hit the database
data = TaskDetail.objects.filter(user__in=the_user) # It selects all tasks by the user
result = data.count() #It hits the database to count
print(result)
以下是相关的docs。
但是,您可以只使用一个表 - 如果这是完整的布局 - 并将user
ForeignKey
作为Task
放入表ManyToManyField
。
你构建它的方式,可能有杂乱的任务,因为用户忘记将任务分配给自己。
答案 2 :(得分:0)
你可以通过2种方式做到这一点(有一些差异):
1.get :
users = User.objects.get(username = "jack" and email= "jack@gmail.com")
注意:在此示例中,我们有username
和password
字段
2.filter :
users = User.objects.filter(username = "jack")
差异:
<{1>}使用中的
您可以使用filter
或.exists()
或.count()
或.first()
(以及其他一些查询)
例如:
.last()
它会显示帖子的拥有者名称为posts_count = Post.objects.filter(owner="jack").count()
jack
中的 但,您无法使用get
或.exists()
或.count()
或.first()
(以及其他查询)