目前,下面的代码允许我显示一个表单并保存到数据库中。但正如我在许多这样的教程中看到的那样,我似乎只找到Add ModelForm Tutorials而不是Edit。如何修改此代码以允许编辑?在这种情况下,将ID或Slug传递给它是基于get.objets.get()#suggestion ID。
提前致谢。
Model.py
from django.db import models
class Suggestion(models.Model):
title = models.CharField(max_length=100)
email = models.EmailField(blank=True)
link = models.URLField(verify_exists=True,blank=True)
description = models.TextField(blank=True)
time_sensitive = models.BooleanField()
approved = models.BooleanField()
def __unicode__(self):
return self.title
Form.py
from django import forms
from django.forms import ModelForm
from contact.models import Suggestion
class SuggestionForm(ModelForm):
class Meta:
model = Suggestion
exclude = ('approved',)
Views.py
from django.shortcuts import *
from django.template import RequestContext
from contact.forms import *
def suggestion(request):
if request.method == "POST":
form = SuggestionForm(request.POST)
if(form.is_valid()):
print(request.POST['title'])
message = 'success'
else:
message = 'fail'
return render_to_response('contact/suggestion.html',
{'message': message},
context_instance=RequestContext(request))
else:
return render_to_response('contact/suggestion.html',
{'form': SuggestionForm()},
context_instance=RequestContext(request))
模板
{% extends "base.html" %}
{% block content %}
<h1>Leave a Suggestion Here</h2>
{% if message %}
{{ message }}
{% endif %}
<div>
<form action="/suggestion/" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit Feedback" />
</form>
</div>
{% endblock %}
答案 0 :(得分:1)
Django带有内置视图,可以使用django的表单来处理对象的创建,更新和删除。
使用UpdateView
应该允许您使用ModelForm更新对象,
使用updateview你必须在url中指定对象id并告诉视图哪个kwarg要查找id。默认情况下我认为它使用pk
答案 1 :(得分:0)
最好的方法是使用django的generic class based views:
如果您仍然不想自己动手,则应使用instance
关键字,例如:
suggestion = Suggestion.objects.get(pk=pk)
form = SuggestionForm(instance=suggestion)
你应该capture the pk in the url pattern,并确保你的功能期望它:
def suggestion(request, pk=None):
if request.method == "POST":
...
尽管如此,基于通用类的视图为您完成了所有艰苦的工作,因此不确定为什么要手动完成(学习机制可能是一个原因)。