我一直在尝试关注文档,但我一直收到错误:
'问题没有属性内容“
我的目标是我需要一个临时变量来保存数据,直到我将其提交到我的实际数据库。
因此,在阅读代码时,内容基本上是tmp,而logComments是我实际想要将其提交到数据库的时候。我试图开发历史跟踪谁编辑了什么,什么时候。但是,每当我调用ref
时,即使我已经定义了一个字符串方法,我仍然会收到该错误。有人可以指出我出错的地方吗?
instance.logComments = formIssues.__str__()
forms.py
class issues(ModelForm):
content = forms.CharField(widget=forms.Textarea,max_length=500, label='')
views.py
def __str__(self):
return str(self.content)
class Meta:
model = History
fields = ['content']
widgets = {'content': Textarea(attrs={'cols': 50, 'rows': 30})}
labels = {'content': ""}
models.py
formIssues = issues(request.POST or None)
#This is for saving the issues textbox
if request.method == 'POST' and formIssues.is_valid() and 'Submit Issue' in request.POST:
#History.logComments = formIssues
instance = formIssues.save(commit=False)
instance.logComments = formIssues.__str__()
instance.projectID = 1337
instance.userID = request.user
instance.commentType = "Issue"
instance.save()
答案 0 :(得分:1)
这里有许多误解,很难理解你从哪里得到它们。
首先,错误消息非常明确:表单的AccessDenied
方法指向__str__
,但表单类没有self.content
属性。它有一组字段,其中一个是content
,但您无法通过content
访问它;你不会想要的,因为字段的字符串表示是一个HTML输入,这就是表单在模板上呈现字段的方式。
其次,文档也清楚如何实际访问提交的数据:通过表单的self.content
字典。因此,在您的情况下,内容值将为cleaned_data
。
但第三,你无论如何都不需要这样做。 form.cleaned_data['content']
已使用表单中的数据填充模型实例。无需再次设置。
您应该返回并阅读表单文档:有full explanation如何创建表单并在视图中使用它。
最后,即使您出于某种原因需要访问任何内容的字符串表示,也不应该直接调用双下划线方法。在Python中执行此操作的方法始终是通过内置函数:在这种情况下,form.save()
。