哎呀。嘿所有,我有一个简单的django问题:
而且,对不起,我已经阅读并阅读了,而且我确定这显然超出了某个地方,但我还没有找到它!
如何使用django编辑/更新模型?比如,数据值?不是模型领域?
这是我的代码! (我正在使用家庭酿造的东西!)
以下是网址:
url(r'^editStory/(?P<id>\d+)$',
StoryModelView.as_view(
context_object_name='form',
template_name ='stories/editStory.html',
success_template= 'stories/editStorySuccess.html'
),
{},
'editStory'
),
以下是观点:
def get(self,request,id=None):
form = self.getForm(request,id)
return self.renderValidations(form)
def getForm(self, request,id):
if id:
return self.getModelById(request,id)
return StoryForm()
def getModelById(self,request,id):
theStory = get_object_or_404(Story, pk=id)
if theStory.user != request.user:
raise HttpResponseForbidden()
return StoryForm(theStory)
def renderValidations(self,form):
if self.context_object_name:
contextName = self.context_object_name
else:
contextName = 'form'
if self.template_name:
return render_to_response(self.template_name,{contextName:form})
else :
return render_to_response('stories/addStory.html',{contextName:form})
def getPostForm(self,request,id):
if id:
theStory = self.idHelper(request,id)
return StoryForm(request.POST,theStory)
return StoryForm(request.POST)
def processForm(self,form,request):
theStory = form.save(commit=False)
theStory.user = request.user
return theStory
以下是模板代码:
{% block content %}
<h3>Edit story</h3>
<form action="" method="post">
{% csrf_token %}
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
</div>
{% endfor %}
<input type="submit" value="Submit"/>
</form>
{% endblock %}
尽可能地尝试,我要么:
由于此行
导致显示的代码出错{% for field in form %}
并且错误为:
Caught AttributeError while rendering: 'Story' object has no attribute 'get'
或者我什么也没得到 - 根本没有数据 - 如果我改变我的“getModelById”方法来阅读:
def getModelById(self,request,id):
theStory = get_object_or_404(StoryForm, pk=id)
if theStory.user != request.user:
raise HttpResponseForbidden()
return theStory
StoryForm是其中一个“ModelForm”的东西,它的模型是“故事”。
SO!问题是:
如何修复此代码以使其正常工作?我做错了什么?
答案 0 :(得分:1)
不知道你的模型是什么样的,你是否正在寻找符合
的内容s = Story.objects.get(some criteria)
s.user = <some user>
s.save()
抱歉,我觉得你的问题有点模糊。
重读后,有一件事突然袭来我:
您无法在模型上进行查询(获取,过滤或对其进行任何变更) - 您必须在对象管理器上执行此操作,如对象。
因此,如上所述,在您的情况下,Story.objects.get_object_or_404应该可以解决您的错误。
答案 1 :(得分:1)
您没有显示您的类继承的内容,但您似乎只是使用标准的单个对象显示视图。相反,您应该使用为此目的提供的editing mixins之一。