【问题标题】:how to check if an object exists in the database and then insert it into a form in django如何检查数据库中是否存在对象,然后将其插入到 django 中的表单中
【发布时间】:2016-03-08 07:16:40
【问题描述】:

我有以下型号:models.py

name = models.CharField(max_length=100, blank=False, null=False)
serial_number = models.CharField(max_length=100, blank=False, null=False)
make = models.CharField(max_length=100, blank=False, null=False)
model = models.CharField(max_length=100, blank=False, null=False)
color= models.CharField(max_length=100, blank=False, null=False)
date_acquired = models.DateTimeField(auto_created=True)
acquired_from = models.CharField(max_length=100, choices=ACQUIRED_FROM)
holder = models.ForeignKey(CertificateHolder, blank=False,)
dealer_license = models.ForeignKey(Dealer, blank=False)

我使用ModelForm 创建了一个表单,如下所示:

class IssueItemForm(ModelForm):

class Meta:
    model = IssuedItem
    fields = '__all__'

经销商需要在签发物品之前检查是否存在证书持有者,我的代码如下所示;

views.py:

def search(request):
try:
    query = request.GET.get('q')
    results = 0

except ValueError:
    query = None
    results = None
if query:
    results = CertificateHolder.objects.get(cert_no=query)

context = RequestContext(request)

return render_to_response('core/results.html', {"results": results, }, context_instance=context)

然后我有模板search.htmlresults.html

<form method="get" action="/search/">
<input type="text" name="q" id="id_q" value="{{ query }}"/>
<input type="submit" value="Search" />
</form>

在 results.html 我有

{% if results %}
<h3>The Certificate number is valid</h3>
<h3>To issues an item click the button below</h3>
<a href="{% url 'issueitem' %}">Issue A New Item</a>

{% else %}
<h3 class='error'>Please enter a valid Certificate</h3>
<form method="get" action="/search/">
  <input type="text" name="q" id="id_q" value="{{ query }}"/>
  <input type="submit" value="Search" />
</form>

{% endif %}

如果数据库中有证书,则代码有效,但如果不匹配,则会引发如下错误:

error image

但是,我希望该错误成为代码的一部分,以告诉经销商该号码不存在,他应该尝试另一个。此外,当证书存在时,我希望将其插入到持有人字段中,而不是像现在这样从数据库中获取。我哪里错了?

【问题讨论】:

  • 您可以在那里处理该错误并返回渲染以响应某个显示尝试其他经销商的 html 页面

标签: python django django-models django-forms


【解决方案1】:

您必须使用Django validation 并尝试以@ilse2005 所指的方式从“干净”方法访问数据库。如果您遇到了 DoesNotExist 异常,您必须在表单本身中引发错误并在您的模板中处理它。

【讨论】:

  • 您可以更改链接吗,因为链接已失效?谢谢
【解决方案2】:

您还必须捕获DoesNotExist 错误。将if query 改为try except 块:

try:
    result = CertificateHolder.objects.get(cert_no=query)
except DoesNotExist:
    pass

【讨论】:

  • 我使用了ObjectDoesNotExist 异常,现在它运行良好。
猜你喜欢
  • 2013-08-22
  • 2014-12-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多