Python 多回波场Django滤波器
我有模特技巧Python 多回波场Django滤波器,python,django,Python,Django,我有模特技巧 class Skill(models.Model): hero= models.ForeignKey(Hero) name = models.CharField(max_length=255) 我有一个模范英雄 class Hero(models.Model): name = models.CharField(max_length=255) 我使用多选字段选择技能 OPTIONS = ( ("sharingan", "sharingan")
class Skill(models.Model):
hero= models.ForeignKey(Hero)
name = models.CharField(max_length=255)
我有一个模范英雄
class Hero(models.Model):
name = models.CharField(max_length=255)
我使用多选字段选择技能
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
在我看来,我有
def vip(request):
heroes = Hero.objects.all
return render(request, 'app_name/search.html',{'heroes': heroes})
我应该在
views.py
中写些什么来选择所有拥有所选技能的英雄?您可能想改用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)
# forms.py
from django import forms
from .models import Hero
class HeroForm(forms.ModelForm):
class Meta:
model = Hero
fields = '__all__'
并使用如下形式:
# 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)
# forms.py
from django import forms
from .models import Hero
class HeroForm(forms.ModelForm):
class Meta:
model = Hero
fields = '__all__'
最后,你的观点是:
# 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})
您可能想改用
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)
# forms.py
from django import forms
from .models import Hero
class HeroForm(forms.ModelForm):
class Meta:
model = Hero
fields = '__all__'
并使用如下形式:
# 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)
# forms.py
from django import forms
from .models import Hero
class HeroForm(forms.ModelForm):
class Meta:
model = Hero
fields = '__all__'
最后,你的观点是:
# 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')
没有测试过,但基本上,对于每个不同的英雄,它都会返回技能和名称。让我知道这是否有帮助。英雄模特不应该拥有外域技能,而不是相反的技能吗?我不明白你上课背后的逻辑 根据您当前的类及其关系,您可以执行以下操作:
chosen_skills = Skill.objects.values('hero').distinct().annotate(skill='name', hero_name='hero__name')
没有测试过,但基本上,对于每个不同的英雄,它都会返回技能和名称。如果有帮助,请告诉我。为什么不使用ManyToManyField?为什么不使用ManyToManyField?我有一个问题:现在我使用的是自定义表单,而不是模型表单。对于这项任务来说,它只是更好。我构建了这样一个表单:
age=forms.ChoiceField(label=“”,choices=age,required=False)
在我的search.html
中,我像这样包含它:{{simple\u search\u form.age}
我能用技能做同样的事情吗?我可以写一些像{{simple\u search\u form.skills}}
这样的东西吗?我有一个问题:现在我使用的是自定义表单,而不是模型表单。对于这项任务来说,它只是更好。我构建了这样一个表单:age=forms.ChoiceField(label=“”,choices=age,required=False)
在我的search.html
中,我像这样包含它:{{simple\u search\u form.age}
我能用技能做同样的事情吗?我可以写一些像{{simple\u search\u form.skills}}
这样的东西吗?