I';我在用Django和Python编辑数据库记录时丢失了一些东西
我是Django和Python新手,我希望能够使用模型表单编辑数据库记录。这是令人沮丧的,因为我知道我错过了一些显而易见的东西,但我花了几个小时试图弄清楚这是什么。我看过一些帖子,他们给了我一个想法,但我在阅读中遗漏了一些东西 我正在运行Windows10桌面,Python3.7。最接近我想做的是这篇文章,但我还是遗漏了一些东西。 (推荐答案中的XXX应该是什么样子) 我在我的名字中尝试了各种pk组合,但没有成功 我感谢你们对我的帮助和指导 我得到的错误是:I';我在用Django和Python编辑数据库记录时丢失了一些东西,python,django,Python,Django,我是Django和Python新手,我希望能够使用模型表单编辑数据库记录。这是令人沮丧的,因为我知道我错过了一些显而易见的东西,但我花了几个小时试图弄清楚这是什么。我看过一些帖子,他们给了我一个想法,但我在阅读中遗漏了一些东西 我正在运行Windows10桌面,Python3.7。最接近我想做的是这篇文章,但我还是遗漏了一些东西。 (推荐答案中的XXX应该是什么样子) 我在我的名字中尝试了各种pk组合,但没有成功 我感谢你们对我的帮助和指导 我得到的错误是: NameError at /proj
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
错误发生在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,)
from django import forms
from .models import emp_table
class EmpDetailForm(forms.ModelForm):
class Meta:
model = emp_table
fields = ('EmpID', 'EmpLastName', 'EmpFirstName',)
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'),
]
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
forms.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,)
from django import forms
from .models import emp_table
class EmpDetailForm(forms.ModelForm):
class Meta:
model = emp_table
fields = ('EmpID', 'EmpLastName', 'EmpFirstName',)
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'),
]
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
url.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,)
from django import forms
from .models import emp_table
class EmpDetailForm(forms.ModelForm):
class Meta:
model = emp_table
fields = ('EmpID', 'EmpLastName', 'EmpFirstName',)
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'),
]
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详细信息表单.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 %}
{%block content%}
更新员工详细信息
{%csrf_令牌%}
{{form.as_ul}}
{%endblock%}
我试图做的是从表中读取一个字段,编辑它,然后将编辑后的字段写回数据库。由于我的问题atm正在将一个字段读入表单,准备对其进行编辑,因此我还没有完成编写部分。您没有任何对
EmpID
的引用,但您在pk中有实例的主键。使用pk获取记录
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(pk=pk)
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}, pk)
您没有对
EmpID
的任何引用,但您在pk中有实例的主键。使用pk获取记录
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(pk=pk)
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}, pk)
在
视图.py中没有变量EmpID
。您拥有的是pk
my_instance=emp\u table.objects.get(id=pk)您的views.py中没有变量EmpID
。您所拥有的是pk
my_instance=emp\u table.objects.get(id=pk)仍然无法工作;为什么有第四个参数来渲染
;关键是,出于某种原因,pk被称为EmpID。您需要my\u instance=emp\u table.objects.get(pk=pk)
或my\u instance=emp\u table.objects.get(EmpID=pk)
谢谢大家。我遵循了Higor和Ajay的建议返回render(请求'proj1/emp detail form.html',{'form':form},pk),然后是Daniel的my_instance=emp_table.objects.get(pk=pk),一切正常。再次谢谢你,还是不行;为什么有第四个参数来渲染
;关键是,出于某种原因,pk被称为EmpID。您需要my\u instance=emp\u table.objects.get(pk=pk)
或my\u instance=emp\u table.objects.get(EmpID=pk)
谢谢大家。我遵循了Higor和Ajay的建议返回render(请求'proj1/emp detail form.html',{'form':form},pk),然后是Daniel的my_instance=emp_table.objects.get(pk=pk),一切正常。再次感谢你。