Сравнение строки с данными в базе данных - PullRequest
0 голосов
/ 25 мая 2019

Я хотел бы сравнить введенное предложение с моим кодом с любым значением в базе данных.

Есть моя функция, которая применяет данные в базу данных с моей страницы:

def create_author(request):
    form_author = AuthorForm()
    context = {'form_author': form_author}
    if request.method == 'POST':
        form_author = AuthorForm(request.POST)

    if form_author.is_valid():
        name = request.POST.get('name',)
        surname = request.POST.get('surname')
        if name == Author.name and surname == Author.surname:
            print("We have this author in database")
            # There should be stop.
        else:
            author_object = Author(name=name, surname=surname)
            author_object.save()

    return render(request, 'authors/create_author.html', context)

и это работает, но только добавляет - не проверяет, существует ли какой-либо автор в БД. Есть идеи по ее исправлению? Спасибо за совет.

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Вы можете использовать get_or_create [Django-doc] здесь, например:

def create_author(request):
    form_author = AuthorForm()
    context = {'form_author': form_author}
    if request.method == 'POST':
        form_author = AuthorForm(request.POST)

    if form_author.is_valid():
        name = form_author.cleaned_data['name']
        surname = form_author.cleaned_data['surname']

        __, <b>created</b> = Author.objects.<b>get_or_create(name=name, surname=surname)</b>
        if not <b>created</b>:
            print("We have this author in database")
            # There should be stop.
    return render(request, 'authors/create_author.html', context)

Таким образом, мы здесь создадим объект Author с данными name и surname, если такого автора еще не существует. Если он уже существует, мы извлекаем его, но это не такая большая проблема.

Обратите внимание, что в случае успешного выполнения POST, вам лучше использовать перенаправление здесь, это Post / Redirect / Get [wiki] архитектурный шаблон.

Вам также лучше использовать cleaned_data вашего form_author вместо непосредственного использования данных request.POST, поскольку они очищаются. Наконец, если AuthorForm является ModelForm [Django-doc] , вам лучше разрешить .save() [Django-doc] выполнить необходимую работу.

0 голосов
/ 25 мая 2019

Вы можете использовать exists().Вместо этого

if name == Author.name and surname == Author.surname:
   print("We have this author in database")

Попробуйте это

if Author.objects.filter(name=name, surname=surname).exists():
   print("We have this author in database")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...