0

ああ。こんにちは、私は非常に単純なジャンゴの質問があります:

そして、ああ、すみません、読んで読んで、これはどこかで非常に明白にカバーされていると確信していますが、見つけられませんでした!

django を使用してモデルを編集/更新するにはどうすればよいですか? 同様に、データ値は?モデルフィールドではありませんか?

これが私のコードです!(私は自家製のものを使用しています!)

ここにURLがあります:

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" の 1 つで、そのモデルは "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 に答える