多回波场Django滤波器

2024-05-18 15:19:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有模特技能

class Skill(models.Model):
    hero= models.ForeignKey(Hero)
    name = models.CharField(max_length=255)

我有模范英雄

^{pr2}$

我用选择题来选择技能

OPTIONS = (
        ("sharingan", "sharingan"),
        ("rasengan", "rasengan"),
        ("fireball", "fireball"),
    )

    skills= forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(),
                                          choices=OPTIONS)

我使用get request来发送我的表单,我的搜索页面url变成了如下内容:

mysite.com/search?skills=shiringan&skills=rasengan

在我的视图.py我有

def vip(request):
    heroes = Hero.objects.all
    return render(request, 'app_name/search.html',{'heroes': heroes})

我应该在views.py中写些什么来选择所有拥有所选技能的英雄?在


Tags: namepysearchmodelsrequest技能formsskills
2条回答

您可能需要使用ManyToManyField。在

像这样:

# models.py
from django.db import models

class Skill(models.Model):
    name = models.CharField(max_length=255)

class Hero(models.Model):
    name = models.CharField(max_length=255)
    skills = models.ManyToManyField(Skill)

使用这样的表格:

^{pr2}$

最后你的观点是:

# views.py
from .models import Hero, Skill
from .forms import HeroForm

def my_heroes(request):
    heroes = Hero.objects.all()
    return render(request, 'your_template.html', {'heroes':heroes})

def hero_skill_select(request):
    if request.method == 'POST':
        form = HeroForm(request.POST)
        # do something
    else:
        form = HeroForm()
    return render(request, 'template_with_form.html', {'form':form})

难道英雄模式不应该有外野技能,而不是相反吗?我不明白你上课的逻辑。在

根据您当前的类及其关系,您可以执行以下操作:

chosen_skills = Skill.objects.values('hero').distinct().annotate(skill='name', hero_name='hero__name')

还没有测试过,但基本上,对于每个不同的英雄,它都会返回技能和名字。如果有帮助,请告诉我。在

相关问题 更多 >

    热门问题