0

내보기는 기능 기반보기입니다 (CBV가 아닌 기존 방식으로 인라인으로 사용하기 때문에보기 편한 방법입니다). 내 목표는 모델 객체 Article.objects.get (user = user) .latest ("id")에 대한 ModelForm을 렌더링하고 POST 메소드를 사용하여 렌더링 된 동일한 객체를 업데이트하는 것입니다. 문제는 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

코멘트를 남겨 ? DB에 저장 하시겠습니까? – Khamidulla

+0

좋아, 모델 및 ArticalForm 정의를 게시 할 수 있습니까? – Khamidulla

+0

@Phoenix : models.py 및 forms.py가 추가되었습니다. 감사. – jazzblue

답변

1

첫째로 당신은 당신이 처리해야 양식 HTML 요소의 내부 템플릿에 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) 
) 

둘째로, 템플릿에 자료를 전달해야 당신의 기사 ID

{% 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() 

는`위의 단계를 시도하고 당신은 문제가 있다면 당신이 (= * ??? * request.POST 예)`a_form = ArticleForm 여기서 뭘 원하는 분명하지 않다

+0

감사합니다. 내가 시험해보기 바로 전에 : 템플릿에서 article_id가 제출되는 form/formset의 일부 여야합니까? 그렇지 않으면 제출 방법은 무엇입니까? – jazzblue

+0

양식 안에 있어야합니다. 자동 제출됩니다. – Khamidulla