- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个任务类,可以有子任务,所以这是一个循环关系。我通过链接器模型/表传递它,如下所示:
class Task(models.Model):
title = models.CharField(max_length=100)
description = models.TextField(blank=True)
completed = models.BooleanField(default=False)
project = models.ForeignKey('Project', related_name="tasks")
dependancy = models.ManyToManyField('self', through='Dependancy', null=True,
blank=True, through_fields=('task', 'sub_task'), symmetrical=False)
def __str__(self):
return self.title
class Dependancy(models.Model):
task = models.ForeignKey(Task)
sub_task = models.ForeignKey(Task)
ERRORS:
gantt_charts.dependency.sub_task: (fields.E303) Reverse query name for 'dependency.sub_task' clashes with field name 'Task.dependency'.
HINT: Rename field 'Task.dependency', or add/change a related_name argument to the definition for field 'dependency.sub_task'.
gantt_charts.dependency.sub_task: (fields.E304) Reverse accessor for 'dependency.sub_task' clashes with reverse accessor for 'dependency.task'.
HINT: Add or change a related_name argument to the definition for 'dependency.sub_task' or 'dependency.task'.
gantt_charts.dependency.task: (fields.E303) Reverse query name for 'dependency.task' clashes with field name 'Task.dependency'.
HINT: Rename field 'Task.dependency', or add/change a related_name argument to the definition for field 'dependency.task'.
gantt_charts.dependency.task: (fields.E304) Reverse accessor for 'dependency.task' clashes with reverse accessor for 'dependency.sub_task'.
HINT: Add or change a related_name argument to the definition for 'dependency.task' or 'dependency.sub_task'.
task_task
和
task_sub_task
,但这听起来是错误的、不直观且令人困惑的。
最佳答案
给定一个 Task
例如,您如何访问所有 Dependencies
将其作为他们的 task
?或者他们的 sub_task
?这就是related_name
的目的— 它提供了 Django 将在 Task
上创建的属性的名称指向那组东西。
您看到该错误是因为 Django 自动使用名称 <model>_set
,并且由于您有两个 ForeignKeys
指向同一个模型,默认名称会发生冲突。
现在,您可能永远不需要直接访问 Dependencies
那样。如果是这种情况,您可以添加 related_name='+'
到这两个字段,并且根本不会创建 reverse 属性(并且您的错误将消失)。
如果您确实想访问它们,名称由您决定。我更喜欢更长但更具描述性的名称,以明确其目的。我可能会像这样对问题进行建模:
class Task(models.Model):
subtasks = models.ManyToManyField('self',
through='Dependancy',
symmetrical=False,
through_fields=('supertask', 'subtask'),
related_name='supertasks')
class Dependancy(models.Model):
supertask = models.ForeignKey(Task, related_name='dependencies_as_supertask')
subtask = models.ForeignKey(Task, related_name='dependencies_as_subtask')
class Meta:
unique_together = ('supertask', 'subtask')
>>> task = Task.objects.get()
>>> # all the Tasks that are supertasks of this one
>>> task.supertasks
>>> # all the Tasks that are subtasks of this one
>>> task.subtasks
>>> # all the Dependencies with this Task as the supertask
>>> task.dependencies_as_supertask
>>> # all the Dependencies with this Task as the subtask
>>> task.dependencies_as_subtask
关于django - 如何使用直通表并指向 self 使用 ManyToManyField 设置 related_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28071554/
我有几个模型,它们有一个外键返回到 Django 中的一个模型,该模型有一个外键返回到 auth User。 models.py class UserDetails(models.Model):
经过一年的 Django 经验,我发现我不太确定我使用 Django related_names正确。 想象一下我有三个模型 classA(models.Model): pass classB
根据 documentation ,相关名称必须是唯一的。再次根据 documentation 的默认值(如果开发人员未明确设置)是 FOO_set ,其中 FOO 是源模型名称。 因此,如果我有两个
我的模型发生了现场冲突: class Visit(models.Model): user = models.ForeignKey(User) visitor = models.Fo
related_name 参数对 ManyToManyField 和 ForeignKey 字段有什么用处?比如给定下面的代码,related_name='maps'的作用是什么? class Map
例子: class Route(models.Model): last_waypoint_visited = models.ForeignKey('WayPoint') class WayPo
抱歉没有描述性的标题,但我真的不知道如何措辞。 假设我有两个模型: class Person(...): name = ... #have an attribute class Family(..
我有以下型号: class A(models.Model): name = models.CharField(max_length=100) c = models.ForeignKey
我有一个用户模型: Class User(models.Model): #some fields 还有另一个 Profile Model,它由字段 -> 母亲和父亲组成。 Class Profi
我有一个抽象基础模型和 2 个继承模型,我需要强制相关名称采用特定格式。 class Animal(models.Model): legs = models.IntegerField(rela
先定义两个模型,一个是A,一个是B,是一对多的类型。 ? 1
我有这个抽象模型: class HasSystemMessage(models.Model): class Meta: abstract = True messages
我正在使用 Python(3.7) 和 Django(2.2) 开发一个项目,其中我实现了两个模型 ItemModel 和 Images 因此每个项目都会有多个图像并将项目添加到 images 模型中
我有两个非常相似的 M2M 领域模型,不知何故,我试图查询其中一个,它工作得很好,但当我尝试使用另一个模型的相同代码时,它给了我错误。我能找到的唯一区别是 lated_name 我找到了解决方法,但我
我的大部分 Django 模型都使用相同的 User Mixin,因此我想为该字段动态创建 related_name。 我希望它是 TestModel 变成 test_models 的类名,或者甚至是
当我在多个字段上使用 django Prefetch 对象 ( https://docs.djangoproject.com/en/2.2/ref/models/querysets/#prefetch
我试图在 Django 中设计一个带有一些审计字段的模型。例如创建于、创建于、更新于和更新于。这四列将在不同应用程序的所有模型中重复出现。 我的第一个问题,是否有一种方法可以放置这些列,并且可以在我每
我最近在我的 Django 模型中遇到了 ForeignKey 冲突。我需要有两个外键(owner、assigned_to)最终指向同一个模型(一个用户)。 据我了解,我需要一个 related_na
我真的很喜欢 Peewee ORM。它轻巧,易于使用,并且有很好的文档记录。我难以理解的一件事是实现外键时使用的 related_name 属性。我永远不确定该属性是否应该与表或列相关。有人可以向我确
我已经搜索了一段时间来解决我的问题,但我似乎无法解决这个问题。 所以我有两个模型: class Messages(models.Model): _db = 'somedb' id =
我是一名优秀的程序员,十分优秀!