强制 Django related_name return 另一个查询集

Force Django related_name return another queryset

我有两个模型:

from django.db import models


class Task(models.Model):
    name = models.CharField(max_length=20)


class CascadedTask(models.Model):
    task = models.ForeignKey('tasks.Task', on_delete=models.CASCADE, related_name='cascaded_from')
    cascaded_from = models.ForeignKey('tasks.Task', on_delete=models.CASCADE)

数据示例:

模型任务:

id  name
------------
1   Task #1
2   Task #2
3   Task #3
4   Task #4
5   Task #5
6   Task #6
7   Task #7

模型级联任务:

id  task_id  cascaded_from_id 
-----------------------------
1   4        1
2   4        2
3   4        3
4   6        2 
5   6        3
6   6        5
7   7        4
8   7        6

我的目标是在使用 related_name 时获取 Task 个对象的 QuerySet 而不是 CascadedTask 个对象:

task = Task.objects.last()  # <Task: Task object (7)>
task.cascaded_from.all()  # <QuerySet [<CascadedTask: CascadedTask object (7)>, <CascadedTask: CascadedTask object (8)>]>

我要task.cascaded_from.all()return<QuerySet [<Task: Task object (4)>, <Task: Task object (6)>]>.

我怎样才能做到这一点?

您的 CascadedTask 模型本质上是 through model for a many-to-many relationship。你根本不需要它:

from django.db import models


class Task(models.Model):
    name = models.CharField(max_length=20)
    cascaded_from = models.ManyToManyField('self', related_name='cascaded_to')

如果您确实想保留模型,例如要添加额外的属性,您可以按照上述 link 的说明进行操作。