Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用AND和OR动态连接Django Q对象_Python_Django_Django Q - Fatal编程技术网

Python 使用AND和OR动态连接Django Q对象

Python 使用AND和OR动态连接Django Q对象,python,django,django-q,Python,Django,Django Q,我希望用户能够通过几个不同的参数(名称、年份等)查询我的数据库,动态添加更多字段,并使用布尔运算符将它们连接起来;最终结果将是“年=1900,Name=鸡和位置=旧金山”。我认为我做了一些错误的事情,因为它没有返回任何东西,即使当我尝试一个字段,我知道一个值与一些数据匹配(例如,当我从Django shell使用.Fiter()时,我可以得到对象。有人知道我怎么修吗 相关视图(忽略草率的缩进,我不想全部修改,但它在我的实际代码中是正确的): 型号: from django.db import m

我希望用户能够通过几个不同的参数(名称、年份等)查询我的数据库,动态添加更多字段,并使用布尔运算符将它们连接起来;最终结果将是“年=1900,Name=鸡和位置=旧金山”。我认为我做了一些错误的事情,因为它没有返回任何东西,即使当我尝试一个字段,我知道一个值与一些数据匹配(例如,当我从Django shell使用.Fiter()时,我可以得到对象。有人知道我怎么修吗

相关视图(忽略草率的缩进,我不想全部修改,但它在我的实际代码中是正确的):

型号:

from django.db import models

class MenuItem(models.Model):
def format_price(self):
    return "${0:0<4,.2f}".format(float(self.price))
def __unicode__(self):
    return self.dish
dish=models.OneToOneField('Dish',to_field='mk')
price=models.CharField(max_length=5,blank=True)
page=models.OneToOneField('MenuPage')
mk=models.CharField(max_length=10,unique=True)
formatted_price = property(format_price)
class Menu(models.Model):
def period(self):#adapted from http://stackoverflow.com/questions/2272149/round-to-5or-other-number-in-python
    try:
        p=int(10*round(float(int(self.year))/10))
        if p < self.year:
            return "%s-%s"%(p,p+5)
        else:
            return "%s-%s"%(p-5,p)
    except (ValueError,TypeError):
        return ""
def __unicode__(self):
    if self.restaurant:
        return self.restaurant
    else:
        return self.mk
restaurant=models.TextField(unique=False,blank=True,null=True)
year=models.CharField(max_length=4,unique=False,blank=True,null=True)
location=models.TextField(unique=False,blank=True,null=True)
status=models.CharField(unique=False,max_length=20)
mk=models.CharField(max_length=8,unique=True,primary_key=True)
period=property(period) 
language = models.CharField(unique=False,max_length=30)
#objects=MenuManager()

class MenuPage(models.Model):
mk=models.CharField(max_length=10,unique=True)
menu_id=models.OneToOneField("Menu",to_field='mk')
#objects=MenuPageManager()
class Dish(models.Model):
def __unicode__(self):
    return self.name
full_name = models.TextField()
name=models.CharField(unique=True,max_length=255)
mk=models.CharField(max_length=10,unique=True)
class Classification(models.Model):
def __unicode__(self):
    if self.classification:
        return self.classification
    else:
        return "none"
dish=models.OneToOneField('dish',to_field='name')
classification=models.CharField(unique=False,max_length=9)
mk=models.CharField(max_length=10,primary_key=True)
来自django.db导入模型的

类菜单项(models.Model):
def格式_价格(自身):

return“${0:0对不起,我原来的帖子超出了您的需要。要澄清,您需要做的只是:

Q(year__icontains=year_input_variable) | Q(city__icontains=city_input_variable) & Q(name__icontains=name_input_variable)
使用&for和,| for或


我之前发布的内容是,如果一个查询包含多个单词,它会检查所有单词是否使用operator匹配。,或者任何单词是否使用operator匹配。
lambda x,y:x&y
operator。和
。我喜欢它,但我想做的是显示结果,例如,匹配城市和年份或名称,这在您的解决方案中是不可能的,我不认为。使用&与|
{% extends "base.html" %}
{% block style %}
<link rel="stylesheet" type="text/css" href="/static/search_style.css" />
{% endblock %}
{% block java %}
<script type="text/javascript" src="/static/searches.js"></script>
{% endblock %}
{% block title %}Search{% endblock %}
{% block head %}Search{% endblock %}
{% block content %}
{% autoescape off %}
<div id="searches">
<form id="search" action="" method="get">
    <table border="0" cellpadding="0" cellspace="0">
        <tbody class="search">
            {% for form in formset.forms %}
            <tr>
                <td class="row">{{ form.row }}</td>
                <td class="query">{{ form.query }}</td>
                <td class="bool">{{ form.bools }}</td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
    {{ formset.management_form }}
    <input type="submit" value="Submit" id="submit">
</form>
</div>
{% if formset.errors or errors %}
<div id="errors">
<h3>The following errors were encountered while trying to submit your search:</h3>
{% for x,y in formset.errors.items %}
<p>{{ x }} : {{ y }}</p>
{% endfor %}
{{ errors }}
</div>
{% endif %}
<div id="notes">
<p>Searching by dish names, locations, and restaurants is case-insensitive.</p>
<p>Searching by course uses  case-insensitive exact matching. Valid courses are Appetizer, Main, and Dessert.</p>
<p>Years should be entered YYYY. Five-year periods span either the first or second half of a decade, and should be entered YYYY-YYYY. Example valid five-year periods are 1900-1905, 1995-2000, etc.</p>
<p>Regular expression search follows MySQL regular expression syntax, as described <a href="http://dev.mysql.com/doc/refman/5.1/en/regexp.html" target="_blank">here</a>.</p>
 </div>

{% endautoescape %}
<br /><br /><br /><br /> <br /><br /><br />
{% endblock %}

{% block footer %}
<div id="warning">
<p>NOTE: This site and the information it contains are still in development. Some information may be missing or inaccurate.</p>
</div>
<div class="credits">
    Created and maintained by <a href="/about#sam">Sam Raker</a> and <a href="/about#rachel">Rachel Rakov</a>
    <br />
    Data graciously provided by <a href="http://menus.nypl.org" target="_blank">What's on the Menu?</a>
</div>
{% endblock %}
Q(year__icontains=year_input_variable) | Q(city__icontains=city_input_variable) & Q(name__icontains=name_input_variable)