python是否有能力创建动态关键字?
例如:
qset.filter(min_price__usd__range=(min_price, max_price))
Run Code Online (Sandbox Code Playgroud)
我希望能够根据选定的货币更改usd部分.
我正在尝试根据用户输入标签查询数据库.标签的数量可以是0-5,因此我需要动态创建查询.
所以我有一个标签列表,tag_list,我想查询数据库:
design_list = Design.objects.filter(Q(tags__tag__contains = "tag1") and Q(tags__tag__contains = "tag2") and etc. etc. )
Run Code Online (Sandbox Code Playgroud)
我该如何创建此功能?
我想在Django中的Model的几个字段中查找某个字符串.理想情况下,它会类似于:
keyword = 'keyword'
fields = ['foo', 'bar', 'baz']
results = []
for field in fields:
lookup = "%s__contains"
results.append(Item.objects.filter(lookup=keyword))
Run Code Online (Sandbox Code Playgroud)
当然这不起作用,因为"查找"无法解析为字段.有没有其他方法可以做到这一点?
我有一个看起来像这样的查询:
cls.objects.filter(name__in=lookup_values).values():
Run Code Online (Sandbox Code Playgroud)
问题是,有时我想过滤,name但有时我想过滤,比方说,officer_number或customer_number.有没有办法让我动态设置whatever__in查询的一部分,以便它不是硬编码的?
如何在运行时指定任意Django查询过滤器?
通常一个人使用像这样的过滤器......
query_set = MyModel.objects.filter(name__iexact='foobar')
Run Code Online (Sandbox Code Playgroud)
但是如果我在字符串中包含查询过滤器说明符怎么办?
query_specifier = "name_iexact='foobar'"
query_set = MyModel.objects.filter(query_specifier) # <-- This doesn't work; How can I do this?
Run Code Online (Sandbox Code Playgroud) 我想动态更改过滤字段。
我有一个名为的模型Product,字段是title和code
class Product(models.Model):
title = models.CharField(max_length=50)
code = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)
我的过滤字段在这样的视图中将是动态的
def filter(request):
search_choices = {
'1': 'title__icontains',
'2': 'code__icontains',
}
col_num = request.GET.get("col_num")
value = request.GET.get("value")
search_field = search_choices.get("col_num")
qs = Product.objects.filter(search_field=value)
........
Run Code Online (Sandbox Code Playgroud)
这里的变量search_field总是动态的......所以我怎么能做到这一点
我正在尝试做一些相当简单的事情.允许用户在searchterm中键入文本字段,然后从下拉框中选择搜索字段.但我似乎得到了上述错误.
模板
<form method='post' action=''>
<input type='text' id='searchterm'>
<select id='searchfield'>
<option value='username'>Username</option>
<option value='status'>Status</option>
</select>
</form>
Run Code Online (Sandbox Code Playgroud)
视图
def existing(request):
if request.method == 'POST':
searchterm = request.POST['searchterm']
searchfield = request.POST['searchfield']
records = User.objects.filter(searchfield=searchterm)
else:
records = User.objects.all()
return render_to_response('gpon_table.html',locals())
Run Code Online (Sandbox Code Playgroud)
楷模
class User(models.Model):
username = models.CharField(max_length=50)
status = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)
也许我在视图中做错了什么.
任何帮助非常感谢.
就我而言,我有一些来自表单的列名.我想过滤以确保它们都是真的.这是我目前的做法:
for op in self.cleaned_data['options']:
cars = cars.filter((op, True))
Run Code Online (Sandbox Code Playgroud)
现在它可以工作,但是有可能有大约40列要测试,因此保持查询效率不高.
有没有办法可以将它压缩成一个过滤查询?
我想创建一个 mixin,允许我get按如下方式更改函数的字段:
class MyMixin(self):
myfield = 'field1'
def myfunct(self):
i = MyModel.objects.get(self.myfield=myvar)
Run Code Online (Sandbox Code Playgroud)
这样所需的代码就可以运行了MyModel.objects.get(field1=myvar)。
但是,这种方法返回
语法错误:表达式不能包含赋值
如何动态设置这样的字段名称?