У меня есть следующие модели: 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 %}
Код работает, если есть сертификат в базе данных, но если нет Соответственно, это вызывает ошибку:
Однако я хотел бы, чтобы ошибка была частью кода, чтобы сообщить дилеру, что этого номера нет, и что он должен попробовать другой. Также, когда существует сертификат, я бы хотел, чтобы он был вставлен в поле держателя вместо того, чтобы извлекать из базы данных, как сейчас. Где я иду не так?
Вы можете обработать эту ошибку и вернуть рендер для ответа на некоторую страницу html, в которой говорится, что попробуйте другого дилера. –