gpt4 book ai didi

django - 制作模型搜索表​​单的最佳方法?

转载 作者:行者123 更新时间:2023-12-04 17:14:05 24 4
gpt4 key购买 nike

我有这个模型:

class Aircraft(models.Model):
model = models.CharField(max_length=64, blank=True)
type = models.CharField(max_length=32)
extra = models.CharField(max_length=32, blank=True)
manufacturer = models.CharField(max_length=32)
engine_type = models.IntegerField("Engine Type", choices=ENGINE_TYPE, default=0)
cat_class = models.IntegerField("Category/Class", choices=CAT_CLASSES, default=1)

我有一个“查找飞机”页面,用户会在其中看到一个表单,他们可以在其中输入数据,这些数据将用于查找符合他们标准的所有飞机。例如,用户可以在文本框中输入“boeing”并在 engine_type 中输入“jet”。框,它将显示数据库中的所有波音喷气式飞机。我现在这样做的方式是通过这种形式:
class AircraftSearch(ModelForm):
search = forms.CharField(max_length=100, required=False)
class Meta:
model = Aircraft
fields = ('engine_type', 'cat_class', )

然后是一个(不必要的复杂) View ,将这种形式的数据转换为一组 filter()被添加到 Aircraft.objects.all() . (我没有为每个 CharField 设置 4 个单独的搜索字段,而是将它们全部合并为一个搜索字段。)

这一切都有效,但有一个问题。如果用户想从他们的搜索条件中排除引擎类型,那么他们就搞砸了,因为“任何”不是引擎类型字段的有效选择。我将不得不为引擎类型和类别/类创建一个新的字段/小部件以包含“任何”,这首先违背了使用模型 View 的目的

我很好奇。有没有更好的办法?这似乎是一项非常常见的任务,必须已经由其他人解决了,但谷歌搜索没有任何结果。

最佳答案

从功能上讲,“任何”都可以通过在过滤中不包括该特定搜索向量来实现。

一般情况下,ModelForm s 用于创建和编辑模型;在这种情况下,我不确定它对你的帮助不仅仅是做一个普通的表格:

class AircraftSearch(forms.Form):
search = forms.CharField(max_length=100, required=False)
engine_type = forms.ChoiceField(choices=ENGINE_TYPE)
cat_class = forms.ChoiceField(choices=CAT_CLASS)

要进行搜索,您只需在字段非空时进行过滤:
def search(request):
if request.method == 'POST':
results = Aircraft.objects.all()

search = request.POST.get('search', None)
if search:
results = results.filter(Q(model=search)|Q(type=search)|Q(extra=search)|Q(manufacturer=search))

engine_type = request.POST.get('engine_type', None)
if engine_type:
results = results.filter(engine_type=engine_type)

cat_class = request.POST.get('cat_class', None)
if cat_class:
results = results.filter(cat_class=cat_class)

return render_to_response('aircraft.html', {'form': AircraftSearch(request.POST), 'aircraft': results})

return render_to_response('aircraft.html', {'form': AircraftSearch()})

关于django - 制作模型搜索表​​单的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1107529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com