我正在尝试编辑一些保存在数据库中的信息。
因此从readAllNew.html中,我正在调用“编辑”按钮:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<table border="1">
<tr>
<th>Naslov</th>
<th>Datum</th>
<th>Autor</th>
<th>Mail</th>
</tr>
{% for x in data %}
<tr>
<td>{{x.naslov}}</td>
<td>{{x.datumObjave}}</td>
<td>{{x.autor}}</td>
<td>{{x.email}}</td>
<td><a href="{% url 'delete' x.id %}">delete</a></td>
<td><a href="{% url 'edit' x.id %}">edit</a></td>
</tr>
{% endfor %}
</table>
</body>
</html>
此URL从那里开始调用(urls.py):
url(r'^app_1/(?P<id>[-\w]+)/edit/$',views.edit, name = 'edit'),
我的views.py如下:
def edit(request, id):
data = get_object_or_404(Clanak, id = id)
if request.method == "POST":
form = ClanakForma(request.POST)
if form.is_valid():
data = form.save(commit=False)
data.naslov = request.user
data.datumObjave = request.user
data.autor = request.user
data.email = request.user
return redirect('readAllNew.html')
else:
form = ClanakForma(instance=data)
template = 'edit.html'
context = {'form': form}
return render(request, template, context)
我的模型。py
class Clanak(models.Model):
naslov = models.CharField(null=False, blank=True, max_length=120)
datumObjave = models.DateField(null=False, blank=False)
autor = models.CharField(null=False, blank=True, max_length=50)
email = models.EmailField(max_length=75, null=True, blank=True)
def __str__(self):
return str(self.naslov) + ', ' + str(self.datumObjave) + ', ' + str(self.autor)
我的forms.py:
class ClanakForma(forms.ModelForm):
class Meta:
model = Clanak
fields = '__all__'
还有我的“ edit.html”:
<form method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit">
</form>
因此,我的视图应调用“ edit.html”,并且可以。我可以看到内部带有值的字段。当我更改某些内容并单击“提交”时,我将重定向到readAllNew.html,但数据库未更新。
-----更新-----
如果我添加“ data.save()”并删除行:
data.naslov = request.user
data.datumObjave = request.user
data.autor = request.user
data.email = request.user
它不会编辑任何内容,但会向表中添加新行。 如果我将其保留为没有“ data.save()”和那些行,但是将“ Commit”更改为“ False”,则会发生同样的情况。
答案 0 :(得分:1)
您正在使用表单创建新的模型实例,而不是编辑现有模型。将您的视图更改为:
def edit(request, id):
data = get_object_or_404(Clanak, id = id)
form = ClanakForma(request.POST or None, instance=data)
if request.method == "POST":
if form.is_valid():
form.save()
return redirect('readAllNew.html')
template = 'edit.html'
context = {'form': form}
return render(request, template, context)
您的视图还存在一些问题,例如,如果表单无效,您将不会向用户返回任何响应。
答案 1 :(得分:0)
添加 data.save()。 此外,您的模型字段具有单独的数据类型,并且您尝试将模型字段更新为 request.user 。 要么使用@Gasanov声明的解决方案,要么可以在分配时维护数据类型。
您更新了问题:使用帖子数据初始化表格时
form = ClanakForma(request.POST, instance=data)
请参阅:https://docs.djangoproject.com/en/2.2/topics/forms/modelforms/#the-save-method