Python 在Django视图中跟踪对象id

Python 在Django视图中跟踪对象id,python,django-models,django-views,django-urls,django-forms,Python,Django Models,Django Views,Django Urls,Django Forms,“我的视图”是一个基于函数的视图(它是一个遗留视图,由于内联表单集的使用,它比CBV更容易保持这种状态)。我的目标是能够为模型对象Article.objects.get(user=user.latest(“id”)呈现模型表单,并使用POST方法更新已呈现的相同对象。问题是模型表单“不记得”它对应的对象。将有关对象的信息传递给视图以便在POST方法中使用的正确方法是什么 下面是views.py和url.py的简化版本 views.py from django.contrib.auth.model

“我的视图”是一个基于函数的视图(它是一个遗留视图,由于内联表单集的使用,它比CBV更容易保持这种状态)。我的目标是能够为模型对象Article.objects.get(user=user.latest(“id”)呈现模型表单,并使用POST方法更新已呈现的相同对象。问题是模型表单“不记得”它对应的对象。将有关对象的信息传递给视图以便在POST方法中使用的正确方法是什么

下面是views.py和url.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)
    )
url.py

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

urlpatterns = patterns('',
    url(r'^$', views.index, name='index')
)
编辑1:添加了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']

首先,您应该在view.py中将文章id传递给模板

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元素的模板中,您应该处理您的文章id

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

尝试以上步骤,如果您有问题,请留下评论,您不清楚在这里要做什么
a_form=ArticleForm(request.POST,instance=*??*)
?你想将其保存到db?好的,我明白了,你能在这里发布你的模型和ArtialForm定义吗?@Phoenix:刚刚添加了models.py和forms.py。谢谢,谢谢。在我尝试之前:在模板中,article_id是否应该是正在提交的表单/表单集的一部分?否则,它是如何提交的?它应该在表单内部。它将自动提交
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()