我想用django_filters.FilterSet尝试 OR语句,以创建“仅过滤字段”(即:模型中不存在)。该字段应检查过滤器值是否与模型“真实字段”(其中两个)匹配
这是我的模特:
class Project(models.Model):
id = models.BigIntegerField(primary_key=True)
name = models.CharField(max_length=255)
cat = models.ForeignKey(Category, related_name='projects', db_index=True, default=None, null=True)
cat_main = models.IntegerField(db_index=True, null=True)
category_id = models.IntegerField(db_index=True, null=True)
country = models.CharField(max_length=16, null=True)
added = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
这是我试图实现的代码:
from django.db.models import Q
class ProjectCatFilter(django_filters.FilterSet):
category = django_filters.MethodFilter(name='category', action='category_or_filter')
class Meta:
model = Project
fields = ['cat_main', 'category_id']
def category_or_filter(self, queryset, value):
return queryset.filter(
Q(category_id=value) | Q(cat_main=value)
)
以下是应该返回“我的类别”匹配“cat_main”或“category_id”的项目的调用
from server.ks.models import Project
projects = Project.objects.filter(category=1)
for p in projects:
print p.name, p.id, p.cat_main, p.category_id
但是我收到了这个错误:
django.core.exceptions.FieldError:无法将关键字“类别”解析为字段。选项包括:name,cat,cat_id,cat_main,category_id,country,added,modified
那么Project.objects.filter(category = 1)返回与category_id或main_cat字段匹配的项目(使用FilterSet与否)的正确/最佳方法是什么?
答案 0 :(得分:0)
django-filter' s from selenium.common.exceptions import NoSuchElementException
try:
time.sleep(2)
self.driver.find_element_by_xpath(".//*[@id='memberReview']/div[2]/div/div/div[2]/div[1]/div[1]/a").click()
except NoSuchElementException:
print "onetouch not present....continuing script"
在概念上类似于Django的内置FilterSet
。
ModelForm
生成一个用于创建或更新模型类实例的表单。ModelForm
生成一个用于构建orm查询的表单。您的示例调用无效,因为它没有调用FilterSet - 没有FilterSet
字段可以过滤。
手动测试filterset:
category