【发布时间】:2019-07-30 13:28:52
【问题描述】:
我是 Django 和 Python 的新手,我希望能够使用模型表单编辑数据库记录。这很令人沮丧,因为我知道我错过了一些显而易见的事情,但我花了几个小时试图弄清楚它是什么。我看过一些帖子,它们给了我一个想法,但我在阅读中遗漏了一些东西。
我正在运行 Windows 10 桌面版,python 3.7。与我正在尝试做的最接近的帖子是这个,但我仍然缺少一些东西。 how to edit model data using django forms(推荐答案中的XXX应该是什么样子)
我在 my_get_name 中尝试了各种 pk 组合,但均未成功。
感谢您为自己提供的任何帮助和指导。
我得到的错误是:
NameError at /proj1/employees/update/EMP0001
name 'EmpID' is not defined
Request Method: GET
Request URL: http://localhost:8000/proj1/employees/update/EMP0001
Django Version: 2.2.1
Exception Type: NameError
Exception Value:
name 'EmpID' is not defined
错误发生在我定义 my_instance 的 views.py 中
views.py
from .models import emp_table
from .forms import EmpDetailForm
def my_get_name(request, pk):
# error occurs on the next line
my_instance = emp_table.objects.get(id=EmpID)
if request.method == 'POST':
form = EmpDetailForm(request.POST, instance=my_instance)
if form.is_valid():
# process the data
# ...
# redirect to a new URL:
return HttpResponseRedirect('/#thanks/')
else:
form = EmpDetailForm(instance=my_instance)
return render(request, 'proj1/emp-detail-form.html', {'form': form}, request.EmpID,)
forms.py
from django import forms
from .models import emp_table
class EmpDetailForm(forms.ModelForm):
class Meta:
model = emp_table
fields = ('EmpID', 'EmpLastName', 'EmpFirstName',)
urls.py
from django.urls import path
from . import views
from . import forms
app_name = 'proj1'
urlpatterns = [
path('', views.mainmenu, name='mainmenu'),
path('employees/update/<str:pk>', views.my_get_name, name='emp-detail-form'),
]
models.py
class emp_table(models.Model):
Default_EmpDeptID = 'ZZZ999'
Default_EmpEmail = 'smith@example.com'
Default_EmpLastName = 'ZZZZZZ'
Default_EmpFirstName = 'AAAAAA'
Default_EmpNumber = '1234567890'
Default_EmpID = '1234567890'
Default_EmpOrgID = '1234567890'
EmpID = models.CharField(max_length=45, primary_key=True, default=Default_EmpID)
EmpNumber = models.CharField(max_length=20, default=Default_EmpNumber)
EmpFirstName = models.CharField(max_length=20, help_text='Enter first name',
default=Default_EmpFirstName, verbose_name='First Name')
EmpLastName = models.CharField(max_length=20, help_text='Enter last name',
default=Default_EmpLastName, verbose_name='Last Name')
EmpEmail = models.EmailField(max_length=60, help_text='eg. mary@example.com',
default=Default_EmpEmail)
EmpDeptID = models.ForeignKey(dept_table, on_delete=models.CASCADE,
default=Default_EmpDeptID)
EmpOrgID = models.CharField(max_length=20, default=Default_EmpOrgID)
return_value = EmpLastName, EmpFirstName
def __str__(self):
return self.EmpLastName
emp-detail-form.html
{% block content %}
<div class='content'>
<h1>Update Employee Details</h1>
<form action="/proj1/employees/update/{{ object.EmpID }}/" method="POST">
{% csrf_token %}
{{ form.as_ul }}
<input type="submit" value="Submit">
</form>
</div>
{% endblock %}
我要做的是从表中读取一个字段,对其进行编辑,然后将编辑后的字段写回数据库。由于我的问题 atm 一直在将一个字段读入一个表单以准备编辑它,所以我还没有完成写作部分。
【问题讨论】:
-
您的
views.py中没有变量EmpID。你所拥有的是pk -
my_instance = emp_table.objects.get(id=pk)