强制 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 的说明进行操作。
我有两个模型:
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 的说明进行操作。