#django #django-models #primary-key #django-views
#django #django-модели #первичный ключ #django-просмотры
Вопрос:
У меня есть этот пользовательский первичный ключ в модели:
class Personal(models.Model):
name = models.CharField(max_length=20,primary_key=True)
email = models.EmailField(blank=True,null=True)
Теперь я не понимаю, как я могу создать свое представление, чтобы не было введено дублирующейся записи? Я искал это в Интернете, но не смог найти любой метод для создания представления.
вот код для представлений
def uregister(request):
errors = []
if request.method == 'POST':
if not request.POST.get('txtName', ''):
errors.append('Enter a Name.')
if not errors:
n = request.POST['txtName']
e = request.POST['txtEmail']
try:
per_job = Personal(name=n, email=e)
per_job.save()
except IntegrityError:
return render_to_response('gharnivas/register.html', {'exists': true}, context_instance=RequestContext(request))
return HttpResponseRedirect('/')
else:
return render_to_response('register.html', {'errors': errors}, context_instance=RequestContext(request))
Как я могу сообщить пользователю, что имя уже существует?
Ответ №1:
Отловите неизбежное исключение при сохранении и сообщите им.
Комментарии:
1. Я обновил views.py как показано в вопросе. Но теперь проблема в том, что данные перезаписываются, не показывая никаких исключений из первичного ключа.!! Это даже то же самое при создании объекта на уровне оболочки.
primary_key
Это не помогает сделать его уникальным. 🙁2. Правильно. Это потому, что первичный ключ не сделает его уникальным. Если вы введете значение, имеющее тот же первичный ключ, то оно заменит существующую запись. Вернитесь к автоматическому первичному ключу и сделайте поле просто
unique
вместо этого.
Ответ №2:
Использовать:
per_job.save(force_insert=True)
Ответ №3:
То, что вы ищете, — это Форма и проверка формы:
http://docs.djangoproject.com/en/dev/topics/forms/?from=olddocs#customizing-the-form-template
Определите класс PersonalForm, переместите проверки в определения полей формы или методы clean * (), затем отобразите поля ошибок из формы в шаблоне.
Ссылка на книгу Django для обработки формы:
Комментарии:
1. Я не спрашиваю о отправке или использовании формы. пожалуйста, обратитесь к моему вопросу. Речь идет о том, как я могу проверить ограничение первичного ключа!!
2. Ок .. запутался с «созданием представления» и «сообщением пользователю».
3. В любом случае, если у вас была личная форма для персональной модели, она должна учитывать ограничение primary_key = True, присутствующее в модели, и должна заполнять поля ошибок в экземпляре формы при нарушении. Я думаю, что Form — это правильный способ для этого, который вы, похоже, не используете.