0

啊。大家好,我有一个简单的 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 %}

尽我所能,我要么:

  1. 得到一个错误
  2. 一无所获

我收到显示的代码错误,由这一行引起

    {% 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”事物之一,它的模型是“Story”。

所以!问题:

如何修复此代码以使其正常工作?我做错了什么?

4

2 回答 2

1

在不知道您的模型是什么样子的情况下,您是否正在寻找类似的东西

s = Story.objects.get(some criteria)
s.user = <some user>
s.save()

?

对不起,我觉得你的问题有点含糊。

重读后,我突然想到一件事:

您不能在模型上进行查询(获取、过滤或任何变化)——您必须在对象管理器上进行,例如对象。

因此,如上所述,在您的情况下, Story.objects.get_object_or_404 应该可以解决您的错误。

于 2012-05-26T21:08:24.793 回答
1

您没有显示您的类继承自什么,但似乎您只是在使用标准的单对象显示视图。相反,您应该使用为此目的提供的编辑 mixin之一。

于 2012-05-26T21:09:42.490 回答