Проверка первичного ключа в django

#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 для обработки формы:

http://www.djangobook.com/en/2.0/chapter07/

Комментарии:

1. Я не спрашиваю о отправке или использовании формы. пожалуйста, обратитесь к моему вопросу. Речь идет о том, как я могу проверить ограничение первичного ключа!!

2. Ок .. запутался с «созданием представления» и «сообщением пользователю».

3. В любом случае, если у вас была личная форма для персональной модели, она должна учитывать ограничение primary_key = True, присутствующее в модели, и должна заполнять поля ошибок в экземпляре формы при нарушении. Я думаю, что Form — это правильный способ для этого, который вы, похоже, не используете.