2016-03-08 2 views
3

У меня есть следующие модели: 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.html и results.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 к попытке кроме блока:

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

Я использовал исключение 'ObjectDoesNotExist' n, теперь он работает хорошо. –

2

Вы должны использовать Django validation и попытаться получить доступ к базе данных с «чистым» способом, как @ ilse2005 называют. если вы получили исключение от DoNotExist, вы должны поднять ошибку в самой форме и обработать ее в своем шаблоне.

Смежные вопросы