我想做的是
1.通过HTML页面向用户显示数据库中的现有数据。
1.让用户更新现有的数据,如果他想这样做。
Promblem 1>问题是,当运行我的代码时,用户输入新数据并单击“更新”按钮,但更新不起作用。
问题2>我在模型中设置备注字段如下:memo=models.CharField(max_length=100)然而,在运行代码后,它只显示了HTML中长字符中的一个字符。
请参考以下代码和结果图像。
<models.py>
class Memo(models.Model):
memo = models.CharField(max_length=100)
user_input = models.CharField(max_length=100)
def __str__(self):
return f" {self.memo} | {self.user_input} "
字符串
<forms.py>
from django import forms
from report.models import Upload, Memo
class UploadFileForm(forms.ModelForm):
class Meta:
model=Upload
fields=('upload_file',)
class InputForm(forms.Form):
memo = forms.CharField()
user_input = forms.IntegerField()
型
<views.py>
def input(request):
items = Memo.objects.all()
if request.method == 'POST':
form = InputForm(request.POST)
if form.is_valid():
# Get the item instance based on the memo from the form
memo = form.cleaned_data['memo']
item = Memo.objects.get(memo=memo)
# Update the item with the new data from the form
item.memo = form.cleaned_data['memo']
item.user_input = form.cleaned_data['user_input']
# Update other fields as needed
item.save()
return redirect('report/success.html') # Redirect to the table display page after updating
else:
form = InputForm()
return render(request, 'report/input.html', {'items': items, 'form': form})
型
<input.html>
<!-- update_table_template.html -->
<!DOCTYPE html>
<html>
<head>
<title>Update Table Data</title>
</head>
<body>
<h1>Table Data</h1>
<table>
<tr>
<th>적요</th>
<th>구분</th>
<th>변경사항</th>
</tr>
{% for item in items %}
<tr>
<td>{{ item.memo }}</td>
<td>{{ item.user_input }}</td>
<td>
<form method="post" action="">
{% csrf_token %}
<input type="text" name="memo" value="{{ item.memo }}">
<input type="text" name="user_input" value="{{ item.user_input }}">
<!-- Add other fields as needed -->
<input type="submit" value="Update">
</form>
</td>
</tr>
{% endfor %}
</table>
</body>
</html>
型
x1c 0d1x的数据
我真的很感谢你的帮助。- 谢谢-谢谢
1条答案
按热度按时间qncylg1j1#
当然,这里有一个完整的回应,包含了你所有的笔记:
您面临着几个问题:
1.数据更新不起作用。
memo
字段在HTML中只显示一个字符,尽管它应该允许最多100个字符。1.在表单中,
user_input
字段使用的是IntegerField
,应该是CharField
。1.您使用的是常规的
Form
,而ModelForm
可以简化代码。以下是这些问题的解决方案:
解决方案1:
在表单的隐藏字段中包含每个
Memo
示例的ID。这样,当表单提交时,您就可以确切地知道需要更新数据库中的哪个对象。按如下方式修改模板:
字符串
调整您的视图,以便在从数据库中获取对象时使用此ID:
型
解决方案二:
1.打开Django admin或从控制台获取备忘录项目,并检查数据库中的真实的值。
1.检查浏览器中的原始HTML,可能是CSS隐藏的字符或视图外部的字符。
解决方案3:
在您的表单中将
user_input
更改为CharField
,如有必要,还可以在您的模型中更改:型
解决方案4:
使用
ModelForm
简化表单处理:型
并调整您的视图以使用此新的
ModelForm
:型
上述解决方案应该可以解决你的问题,并改善你在Django中的表单处理。