2014-01-09 65 views
0

我的视图是一个基于函数的视图(这是一个遗留问题,由于内联formset的使用,更容易保持它的方式而不是CBV)。我的目标是能够为模型对象Article.objects.get(user = user).latest(“id”)和POST方法渲染ModelForm,更新已渲染的同一个对象。问题是ModelForm“不记得”它所对应的对象。将关于对象的信息传递给POST方法中使用的视图的正确方法是什么?在Django视图中跟踪对象ID

下面是views.py的简化版本和urls.py

views.py

from django.contrib.auth.models import User 
from django.shortcuts import render_to_response 
from django.template import RequestContext 
from specify.models import Article 
from specify.forms import ArticleForm 

def index(request): 

    user = User.objects.get(username=request.user.username) 

    if request.method == "POST": 
     a_form = ArticleForm(request.POST, instance= *???*) 
     a_form.save() 
    else: 
     a = Article.objects.get(user=user).latest("id") 
     a_form = ArticleForm(instance=a) 

    return render_to_response(
     "specify/index.html", 
     { 
      "a_form" : a_form, 
     }, 
     context_instance=RequestContext(request) 
    ) 

urls.py

from django.conf.urls import patterns, url 
from specify import views 

urlpatterns = patterns('', 
    url(r'^$', views.index, name='index') 
) 

EDIT1:加入models.py和forms.py

models.py

from django.db import models 

class Article(models.Model): 
    pub_date = models.DateField() 
    headline = models.CharField(max_length=200) 
    content = models.TextField() 

forms.py

from django.forms import ModelForm 
from specify.models import Article 

class ArticleForm(ModelForm): 
    class Meta: 
     model = Article 
     fields = ['pub_date', 'headline', 'content'] 
+0

目前尚不清楚你想在这里做'a_form = ArticleForm(request.POST,例如= * ??? *)什么' ?你想保存到数据库? – Khamidulla

+0

好的我明白你能否在这里发布你的模型和ArticalForm定义? – Khamidulla

+0

@Phoenix:刚刚添加了models.py和forms.py。谢谢。 – jazzblue

回答

1

首先,你应该通过文章编号,以模板,在view.py

def index(request): 

user = User.objects.get(username=request.user.username) 

if request.method == "POST": 
    #Explained later 
else: 
    a = Article.objects.get(user=user).latest("id") 
    a_form = ArticleForm(instance=a) 
    article_id = a.id 

return render_to_response(
    "specify/index.html", 
    { 
     "a_form" : a_form, 
     "article_id": article_id, 
    }, 
    context_instance=RequestContext(request) 
) 

第二模板中的表单HTML元素的内部,你应该处理您的文章编号

{% if article_id %} 
<input type="hidden" value='{{ article_id }}' id='article_id' name='article_id'/> 
{% endif %} 

第三,在更新处理中,您应该执行以下操作:

if request.method == "POST":    
    article_id = request.POST.get('article_id') # You are getting passed article id 
    a = Article.objects.get(pk=article_id)  # You are getting instance by id 
    a_form = ArticleForm(request.POST, instance=a) 
    a_form.save() 

尝试上面的步骤,如果你有问题发表评论

+0

谢谢。就在我尝试之前:在模板中,article_id应该是提交的表单/表单集的一部分吗?否则,它是如何提交的? – jazzblue

+0

它应该在表单内。它会自动提交 – Khamidulla