【发布时间】:2019-08-08 16:20:35
【问题描述】:
RoR 难民,在这里学习 Django。 我有一个包含相关模型、项目和工作流的应用程序。我需要创建与项目相关的新工作流对象(项目可以有许多工作流)。我有这个工作正常的逻辑和关系,但是当我尝试在 Project 类中创建一个方法以将工作流添加到 Project 实例并提供默认值时,我无法让它工作。我有这个功能,但是得到一个属性错误'Manager'对象没有属性'add'。当我研究经理时,我找不到涉及添加到模型的函数的参考资料,只涉及限制查询集。我怀疑我的方法不是以 Django 方式做事。
编写了类和函数,遇到了错误,研究了这些,没有发现任何有用的东西。
class Project(models.Model):
STATUS_CHOICES = (
('NS', 'Not Started'),
('IP', 'In Process'),
('PR', 'Pending Review'),
('CP', 'Complete'),
)
project_id = models.AutoField(primary_key=True)
client_id = models.ForeignKey('clients.Client', on_delete=models.CASCADE)
name = models.CharField(max_length=255, blank=False, null=False)
description = models.CharField(max_length=255, blank=True)
status = models.CharField(max_length=2, choices=STATUS_CHOICES)
def __str__(self):
# Return the name of the Project.
return self.name
@classmethod
def add_workstream(self, ws_name='New Workstream', ws_desc='TBD'):
"""Add a workstream.
Include optional arguments for name, description and status.
"""
from workstreams.models import Workstream
new_ws = Workstream(project_id=self.project_id,
name=ws_name,
description=ws_desc)
new_ws.save()
# Complete workstreams/models.py
from django.db import models
import tasks
import artifacts
class Workstream(models.Model):
STATUS_CHOICES = (
('NS', 'Not Started'),
('IP', 'In Process'),
('PR', 'Pending Review'),
('CP', 'Complete'),
)
workstream_id = models.AutoField(primary_key=True)
project_id = models.ForeignKey('projects.Project',
on_delete=models.CASCADE)
name = models.CharField(max_length=255, blank=False, null=False)
description = models.CharField(max_length=255, blank=True)
status = models.CharField(max_length=2, choices=STATUS_CHOICES)
def __str__(self):
return self.name
在 Django 控制台中:
>>> test=Project.objects.get(name='Auditron')
>>> test.add_workstream()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/srummel/DEV/auditron/auditron/projects/models.py", line 28, in add_workstream
from workstreams.models import Workstream
AttributeError: 'Manager' object has no attribute 'add'
>>>
我希望创建一个链接到我的项目的新工作流实例,并填充默认值。 我知道问题出在我的经理身上——我在问我的方法是否正确,如果是,是否有人有任何例子说明经理为相关类实现“添加”功能是什么。我的后脑告诉我我犯了一个基本的架构错误,但不确定是什么。感谢您的帮助。
【问题讨论】:
-
此错误并非来自您发布的任何代码。你在哪里打电话
add? -
抱歉,函数是'add_workstream'。
-
不,我看到了,但是该方法的代码中没有发生该错误。这似乎是由于导入 workstreams.models 而发生的;您应该显示您在该文件中的哪个位置调用
.add。 -
错误出现在 Django 控制台中 - 我创建了一个名为“test”的项目对象,然后调用了“test.add_workstream()”并得到了 AttributeError。
-
再一次,请显示完整的 workstreams/models.py 文件,包括它调用
.add的地方。
标签: django django-models