字符串与数据库中数据的比较

时间:2019-05-25 09:34:41

标签: python django database

我想将我输入到代码中的句子与数据库中的任何值进行比较。

我的功能是将数据从我的页面应用到数据库中

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中是否存在任何作者。 有修复的想法吗?感谢您的建议。

2 个答案:

答案 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)

因此,我们将在给定Authorname的情况下创建surname对象,前提是该作者尚不存在。如果已经存在,我们将对其进行检索,但这并不是什么大问题。

请注意,如果POST成功,则最好在此处使用重定向,这是Post/Redirect/Get [wiki]体系结构模式。

您也最好使用cleaned_data中的form_author,而不是直接使用request.POST数据,因为这样可以清除数据。最后,如果AuthorFormModelForm [Django-doc],则最好让.save() [Django-doc]完成所需的工作。