我想将我输入到代码中的句子与数据库中的任何值进行比较。
我的功能是将数据从我的页面应用到数据库中
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)
,它可以工作,但只能添加-不检查db中是否存在任何作者。 有修复的想法吗?感谢您的建议。
答案 0 :(得分:0)
您可以使用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")
答案 1 :(得分:0)
您可以在此处使用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']
__, created = Author.objects.get_or_create(name=name, surname=surname)
if not created:
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]完成所需的工作。