如何从这个charField获得一个str?

时间:2016-06-15 12:16:17

标签: django

我一直在尝试关注文档,但我一直收到错误:

  

'问题没有属性内容“

我的目标是我需要一个临时变量来保存数据,直到我将其提交到我的实际数据库。

因此,在阅读代码时,内容基本上是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()

1 个答案:

答案 0 :(得分:1)

这里有许多误解,很难理解你从哪里得到它们。

首先,错误消息非常明确:表单的AccessDenied方法指向__str__,但表单类没有self.content属性。它有一组字段,其中一个是content,但您无法通过content访问它;你不会想要的,因为字段的字符串表示是一个HTML输入,这就是表单在模板上呈现字段的方式。

其次,文档也清楚如何实际访问提交的数据:通过表单的self.content字典。因此,在您的情况下,内容值将为cleaned_data

但第三,你无论如何都不需要这样做。 form.cleaned_data['content']已使用表单中的数据填充模型实例。无需再次设置。

您应该返回并阅读表单文档:有full explanation如何创建表单并在视图中使用它。

最后,即使您出于某种原因需要访问任何内容的字符串表示,也不应该直接调用双下划线方法。在Python中执行此操作的方法始终是通过内置函数:在这种情况下,form.save()