首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索函数不返回任何-Django

问搜索函数不返回任何-Django
EN

Stack Overflow用户
提问于 2018-11-29 02:57:40
回答 1查看 193关注 0票数 0
代码语言:javascript
复制
def Search(request):
  if request.method == 'GET' and request.GET['x']:
    parameter = request.GET['x']
    results = Category.objects.filter(advert__Seller_Name__icontains = parameter)
    return render(request, 'campusbuy/search.html', {'results': results})

else:
    return render(request, 'campusbuy/search.html')

上面是我的搜索功能。当我试图在我的模板中搜索一个对象时,它什么也不返回。但是,当我故意搜索不在数据库中的Seller_name时,它会返回{% Else%}值。以下是模板:

代码语言:javascript
复制
% extends 'campusbuy/base.html' %}

{% block content %}

{% if results %}


    {% for ads in results.advert_set.all %}
        <p>{{ads.Seller_Name }}</p>
        <p>{{ads.Location}}</p>
        <p>{{ads.Description}}</p>
        <p>{{ads.Asking_Price}}</p>

     {% endfor %}

{% else %}
    <p>No Ad matched your search criteria.</p>

{% endif %}


{% endblock %}

下面是models.py:

代码语言:javascript
复制
class Category(models.Model):

Name = models.CharField(max_length=20, null=True, blank=True)
Details = models.CharField(max_length=100, default="Default")
Category_Logo = models.ImageField(max_length=100, upload_to='uploads')

def __str__(self):
    return self.Name

class Advert(models.Model):

HALL3 = 'HALL3'
HALL4 = 'HALL4'
HALL2 = 'HALL2'
MAIN_GATE = 'MAINGATE'
HALL1 = 'HALL1'

Location_Choices = (
    (HALL3, 'Hall3'),
    (HALL4, 'Hall4'),
    (HALL2, 'Hall2'),
    (MAIN_GATE, 'Main_gate'),
    (HALL1, 'Hall1')
)

category = models.ForeignKey(Category, on_delete=models.CASCADE)
Seller_Name = models.CharField(max_length=50, blank=False, null=False)
Phone_Number = models.CharField(max_length=11, blank=False, null=False,
                                help_text='<p style="color: red; font: italic 12px tahoma;">**Please input a working Phone Number that you can be contacted with on the fly</p>')
image = models.ImageField(max_length=100, upload_to='uploads')
Item = models.CharField(max_length=20, blank=False, null=False)
Location = models.CharField(max_length=10, choices=Location_Choices, default=HALL3, blank=False)
Description = models.TextField(max_length=250, blank=False, null=False)
Asking_Price = models.CharField(max_length=20, blank=False, null=False)
published_date = models.DateTimeField(blank=False, default=timezone.now)

提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2018-11-30 16:46:34

我仍然不理解您为什么要在查询中包含Category,因为您根本没有在查询本身或模板中使用它。只需直接查询和使用广告:

代码语言:javascript
复制
results = Advert.objects.filter(Seller_Name__icontains=parameter)

并直接遍历它:

代码语言:javascript
复制
{% for ads in results %}
    <p>{{ads.Seller_Name }}</p>
    <p>{{ads.Location}}</p>
    <p>{{ads.Description}}</p>
    <p>{{ads.Asking_Price}}</p>
 {% endfor %}

还要注意,您不需要if块,因为如果循环为空,则会显示for template tag has an [empty`](https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#for-empty)子句:

代码语言:javascript
复制
{% for ads in results %}
    <p>{{ads.Seller_Name }}</p>
    <p>{{ads.Location}}</p>
    <p>{{ads.Description}}</p>
    <p>{{ads.Asking_Price}}</p>
{% empty %}
    <p>No Ad matched your search criteria.</p>
{% endfor %}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53526305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档