因此,我正在使用django进行我的第一个项目,该项目显示了REST API方法的示例,例如通过姓,名和电子邮件组成的数据库进行的POST,GET,PUT和DELETE。我已经成功完成了POST和GET,但现在在使用PUT时遇到了麻烦。
所以我有三个功能。首先,一个简单的def函数显示到目前为止的所有信息输入。其次是基于类的函数,该函数以特定顺序列出信息。第三,另一个基于类的函数,显示该特定信息的详细信息。所有功能都可以工作,但是现在当我将两个html文件链接在一起时,我得到了一个错误。想要链接到该特定信息时,我尝试了许多不同的ID,但它们却无法正常工作。
但这是我的models.py:
class Information(models.Model):
"""Placeholder code that the viewer will be seeing."""
info_id = models.AutoField(primary_key=True,unique=True)
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
e_mail = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
"""Return information."""
return f"Info ID: {self.info_id}, First Name: {self.first_name}, Last Name: {self.last_name}, E-mail: {self.e_mail}"
这是我的表格。py:
class NameForm(forms.ModelForm):
class Meta:
model = Information
fields = ['info_id', 'first_name', 'last_name', 'e_mail']
labels = {'first_name': 'First Name:', 'last_name': 'Last Name:', 'e_mail': 'E-mail:'}
widgets = {'first_name': '',
'last_name': '',
'e_mail': '',
}
def clean(self):
cleaned_data = super(NameForm, self).clean()
labels = cleaned_data.get('labels')
widgets = cleaned_data.get('widgets')
这是我的urls.py:
# Page(s) that shows the viewer an example of PUT.
path('PUTData/', InfoDataListView.as_view(), name='put_data'),
path('PUTData/<int:pk>/', InfoDataDetailView.as_view(), name='put_detail'),
这是我的views.py:
def put_data(request):
put_data = Information.objects.all()
context = {'put_data': put_data}
return render(request, 'just_projects/put_data.html', context)
class InfoDataListView(ListView):
model = Information
template_name = 'just_projects/put_data.html'
context_object_name = 'put_data'
ordering = ['-date_added']
class InfoDataDetailView(DetailView):
model = Information
这是我的两个html:put_data.html和information_detail.html
{% extends "just_projects/base.html" %}
{% block content %}
<p><h3>Information:</h3></p>
<ul>
{% for pd in put_data %}
<div class="card mb-3">
<h4 class="card-header">
{{ pd.date_added|date:'M d, Y H:i' }}
<small><a href="{% url 'just_projects:put_detail' PUTData.id %}">Edit info.</a></small>
</h4>
<div class="card-body">
{{ pd }}
</div>
</div>
{% empty %}
<li>There is no information yet.</li>
{% endfor %}
</ul>
<hr />
{% endblock content %}
{% extends "just_projects/base.html" %}
{% block content %}
<p><h3>Information:</h3></p>
<ul>
<div class="card mb-3">
<h4 class="card-header">
{{ object.date_added|date:'M d, Y H:i' }}
</h4>
<div class="card-body">
{{ object }}
</div>
</div>
</ul>
<hr />
<p>
</p>
{% endblock content %}
因此错误消息是反向匹配,因为他们找不到正确的ID吗?具体的异常错误和值是:
异常类型:NoReverseMatch
异常值:
找不到带有参数“('',)”的“ put_detail”。尝试了1个模式:['PUTData /(?P [0-9] +)/ $']
答案 0 :(得分:0)
您在url
标记中使用了错误的变量名。您的对象称为pd
,因此ID就是从那里来的。
<a href="{% url 'just_projects:put_detail' pd.id %}">
(不相关,但是您的clean
方法是没有意义的;它在Meta类之内,因此永远不会被调用,但是它没有任何用处。您应该删除它。)
编辑,查看您的模型,由于某种原因,您的主键称为info_id
。因此,pd.info_id
或只是pd.pk
。
尽管我会质疑为什么首先需要更改主键的名称。