Вы можете использовать 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] выполнить необходимую работу.