2016-03-08 48 views
3

我有以下型号:models.py如何检查是否存在于数据库中的对象,然后将其插入一个表格在Django

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

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

+0

你可以在那里处理那个错误,并返回渲染来回应一些HTML页面,它说,尝试另一个经销商 –

回答

1

您还必须赶上DoesNotExist错误。更改if query一试except块:

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

我使用了'ObjectDoesNotExist'异常现在它运行良好。 –

2

您必须使用Django validation,并尝试从“干净”的方法来访问数据库的方式@ ilse2005简称。如果你得到了DoesNotExist异常,你必须在表单中引发一个错误并在模板中处理它。

相关问题