当前位置: 首页 > 知识库问答 >
问题:

如何从姜戈形态中获取价值?

闾丘选
2023-03-14

我有一个窗体,其中有一个字段用于选择一个方法来对对象进行排序。但是,当我引用该字段以获取它的值时,它就等于呈现此表单的HTML代码。我如何解决这个问题?

我的表单:

class sortChoice(forms.Form):
    CHOICES = [('sbd', 'Сортировать по дате'),
                ('sbp', 'Сортировать по популярности')]
    choice = forms.ChoiceField(choices = CHOICES, widget = forms.RadioSelect, label = 'Сортировка по')

我的观点:

@login_required(login_url = 'login')

def vacancyListView(request):
    searchQueryNavbar = request.GET.get('search_navbar', '')
    searchQueryVLpage = request.GET.get('search_vlpage', '')
    form = sortChoice()
    print(form['choice'])
    if searchQueryNavbar or searchQueryVLpage:
        if searchQueryNavbar:
            searchQuery = searchQueryNavbar
        else:
            searchQuery = searchQueryVLpage
        if form['choice'] == 'sbp':
            queryset = Vacancy.objects.filter(Q(name__icontains = searchQuery) | Q(salary__icontains = searchQuery) | Q(competences__icontains = searchQuery)).order_by('-viewsAmount')
        if form['choice'] == 'sbd':
            queryset = Vacancy.objects.filter(Q(name__icontains = searchQuery) | Q(salary__icontains = searchQuery) | Q(competences__icontains = searchQuery)).order_by('-creationDate')
    else:
        queryset = Vacancy.objects.all().order_by('-viewsAmount')
    context = {
        'objectList':queryset,
        'form':form
    }
    return render(request, "vacancyList.html", context)

打印(从['choice'])的控制台输出:

<ul id="id_choice">

    <li><label for="id_choice_0"><input type="radio" name="choice" value="sbd" required id="id_choice_0">
 Сортировать по дате</label>
</li>
    <li><label for="id_choice_1"><input type="radio" name="choice" value="sbp" required id="id_choice_1">
 Сортировать по популярности</label>
</li>
</ul>

共有1个答案

丁良骏
2023-03-14

您必须为表单分配数据。请参阅绑定表单和未绑定表单

form = sortChoice(request.POST or request.GET)

调用form.is_valid()后,您将能够访问cleaned_data

然后您的代码如下所示:

@login_required(login_url = 'login')
def vacancyListView(request):
    searchQueryNavbar = request.GET.get('search_navbar', '')
    searchQueryVLpage = request.GET.get('search_vlpage', '')
    form = sortChoice(request.POST or request.GET)
    if searchQueryNavbar or searchQueryVLpage:
        if searchQueryNavbar:
            searchQuery = searchQueryNavbar
        else:
            searchQuery = searchQueryVLpage
        if form.is_valid():
            selected = form.cleaned_data.get("choice")
            if selected == 'sbp':
                queryset = Vacancy.objects.filter(Q(name__icontains = searchQuery) | Q(salary__icontains = searchQuery) | Q(competences__icontains = searchQuery)).order_by('-viewsAmount')
            if selected == 'sbd':
                queryset = Vacancy.objects.filter(Q(name__icontains = searchQuery) | Q(salary__icontains = searchQuery) | Q(competences__icontains = searchQuery)).order_by('-creationDate')
    else:
        queryset = Vacancy.objects.all().order_by('-viewsAmount')
    context = {
        'objectList':queryset,
        'form':form
    }
    return render(request, "vacancyList.html", context)

我将更改choice键,如下所示:

CHOICES = [
    ('creationDate', 'Сортировать по дате'),
    ('viewsAmount', 'Сортировать по популярности')
]

那么您就不必使用if else并这样做:

queryset = Vacancy.objects.filter(
    Q(name__icontains = searchQuery) | Q(salary__icontains = searchQuery) | Q(competences__icontains = searchQuery)
).order_by('-%s' % form.cleaned_data.get("choice"))
 类似资料:
  • 这是我的settings.py: 我已经验证了电子邮件地址,并生成了SMTP凭据,我下载了包含IAM用户名、Smtp用户名、Smtp密码的凭据。我使用smtp用户名EMAIL_HOST_USER和smtp密码EMAIL_HOST_PASSWORD。 在django中,我发送了一封带有以下行的电子邮件(admin@admin.com替换为已验证电子邮件列表中的gmail帐户): 那是行不通的。从SE

  • 问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 我想从URL获取值,以按ID从数据库中选择数据。我想要ID值。 例如,如果我打开数据库, 我想获取id = 12的值。 如果我打开,则 获取数据库中id = 7的值,依此类推。 我有一些代码: 问题答案: 网址: 码:

  • 问题内容: 问题 从地图中获取数据 资料格式 注意 如何从上述结果中获得以下值 1.Event_dtmReleaseDate 2.strID 3.Trans_strGuestList 我试过的 res.Map(“ Event_dtmReleaseDate”); 错误:res.Map未定义(类型map [string] interface {}没有字段或方法Map) res.Event_dtmRel

  • 在的。NET框架4. x,我可以使用在中获取,然后我可以通过 但是在。Net内核,我必须注入,并且不能通过 有没有一种方法可以直接通过获取的值?

  • 问题内容: 我有一个枚举,看起来像: 我有一个看起来像的测试班 输出为: 代替 我不确定这里出什么问题了吗?? 问题答案: 您需要 重写枚举的方法:

  • 我想制作一个简单的共享按钮来获取TextView值并共享它,但我不知道怎么做。 代码如下: 而相关的布局是: 我在这里看了文档和一些类似的问题,但找不到我的答案。感谢你对此的帮助。