姜戈 | FilterSet 不是 运行 查询
Django | FilterSet not running query
我在对 django 中的 table 应用过滤器时遇到了一些问题,当我应用过滤器(即单击“搜索”)时没有任何反应。没有错误。没有崩溃。纳达。 table 保持不变,就好像什么都没发生一样,尽管 url 确实改变了添加我应用的搜索字段。
为了简单起见,我将重命名变量、模型和一般所有内容的原始名称。
models.py
from django.db import models
from other_app.models import CustomUser
from another_app.models import OtherModel
class SomeThings(models.Model):
# default User was replaced with an AbstractUser model
user = models.OneToOneField(CustomUser, on_delete=models.PROTECT)
id = models.CharField(max_length=10,primary_key=True)
thing_1= models.PositiveIntegerField(blank=False)
thing_2= models.PositiveIntegerField(blank=False)
image= models.ImageField(null=True, blank=True)
class SomeStuff(models.Model):
id = models.OneToOneField(SomeThings, on_delete=models.PROTECT)
stuff_1 = models.CharField(max_length=255, blank=False)
stuff_2 = models.CharField(max_length=255, blank=False)
stuff_3 = models.ForeignKey(OtherModel, on_delete=models.PROTECT, null=True)
class OtherInfo(models.Model):
id = models.OneToOneField(SomeThings, on_delete=models.PROTECT)
character_1 = models.CharField(max_length=255, blank=False)
character_2 = models.CharField(max_length=255, blank=False)
filters.py
import django_filters
from .models import *
class myFilter(django_filters.FilterSet):
class Meta:
model = SomeStuff
fields = '__all__'
exclude = ['stuff_2','stuff_3']
views.py
from django.shortcuts import render
from django.http import HttpResponse
from .filters import myFilter
def search(request):
products = SomeStuff.objects.all()
filter= myFilter(request.GET,queryset=products)
product= filter.qs
context = {'products':products,'filter':filter,}
return render(request, 'search.html', context)
search.html
{% load static %}
... some html stuff ...
<form method="get">
{{ filter.form }}
<button class="btn btn-primary" type="submit">
Search
</button>
</form>
<table>
<thead>
<tr>
<th>Stuff 1</th>
<th>Object 1</th>
<th>Object 2</th>
</tr>
</thead>
<tbody>
{% for product in products %}
<tr>
<td>{{product.stuff_1}}</td>
<td>{{product.id.otherinfo.character_1}}</td>
<td>{{product.id.otherinfo.character_2}}</td>
</tr>
{% endfor %}
</tbody>
</table>
基本上,用户模型与模型 SomeThings 相关。后面的模型包含另一个 primary_key,用于 SomeStuff 和 OtherInfo。
在 table 上,正在显示来自 SomeStuff 和 OtherInfo 的信息,但是,我只想使用 SomeStuff 中指定的变量 stuff_1 来过滤 table。
我认为你必须将 product
更改为 products
def search(request):
products = SomeStuff.objects.all()
filter= myFilter(request.GET,queryset=products)
products= filter.qs #this should be products instead of product
context = {'products':products,'filter':filter,}
return render(request, 'search.html', context)
我在对 django 中的 table 应用过滤器时遇到了一些问题,当我应用过滤器(即单击“搜索”)时没有任何反应。没有错误。没有崩溃。纳达。 table 保持不变,就好像什么都没发生一样,尽管 url 确实改变了添加我应用的搜索字段。
为了简单起见,我将重命名变量、模型和一般所有内容的原始名称。
models.py
from django.db import models
from other_app.models import CustomUser
from another_app.models import OtherModel
class SomeThings(models.Model):
# default User was replaced with an AbstractUser model
user = models.OneToOneField(CustomUser, on_delete=models.PROTECT)
id = models.CharField(max_length=10,primary_key=True)
thing_1= models.PositiveIntegerField(blank=False)
thing_2= models.PositiveIntegerField(blank=False)
image= models.ImageField(null=True, blank=True)
class SomeStuff(models.Model):
id = models.OneToOneField(SomeThings, on_delete=models.PROTECT)
stuff_1 = models.CharField(max_length=255, blank=False)
stuff_2 = models.CharField(max_length=255, blank=False)
stuff_3 = models.ForeignKey(OtherModel, on_delete=models.PROTECT, null=True)
class OtherInfo(models.Model):
id = models.OneToOneField(SomeThings, on_delete=models.PROTECT)
character_1 = models.CharField(max_length=255, blank=False)
character_2 = models.CharField(max_length=255, blank=False)
filters.py
import django_filters
from .models import *
class myFilter(django_filters.FilterSet):
class Meta:
model = SomeStuff
fields = '__all__'
exclude = ['stuff_2','stuff_3']
views.py
from django.shortcuts import render
from django.http import HttpResponse
from .filters import myFilter
def search(request):
products = SomeStuff.objects.all()
filter= myFilter(request.GET,queryset=products)
product= filter.qs
context = {'products':products,'filter':filter,}
return render(request, 'search.html', context)
search.html
{% load static %}
... some html stuff ...
<form method="get">
{{ filter.form }}
<button class="btn btn-primary" type="submit">
Search
</button>
</form>
<table>
<thead>
<tr>
<th>Stuff 1</th>
<th>Object 1</th>
<th>Object 2</th>
</tr>
</thead>
<tbody>
{% for product in products %}
<tr>
<td>{{product.stuff_1}}</td>
<td>{{product.id.otherinfo.character_1}}</td>
<td>{{product.id.otherinfo.character_2}}</td>
</tr>
{% endfor %}
</tbody>
</table>
基本上,用户模型与模型 SomeThings 相关。后面的模型包含另一个 primary_key,用于 SomeStuff 和 OtherInfo。
在 table 上,正在显示来自 SomeStuff 和 OtherInfo 的信息,但是,我只想使用 SomeStuff 中指定的变量 stuff_1 来过滤 table。
我认为你必须将 product
更改为 products
def search(request):
products = SomeStuff.objects.all()
filter= myFilter(request.GET,queryset=products)
products= filter.qs #this should be products instead of product
context = {'products':products,'filter':filter,}
return render(request, 'search.html', context)