Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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 Django视图只返回一个特定字段,而不是整个模型_Python_Django_Django Views_Django Haystack - Fatal编程技术网

Python Django视图只返回一个特定字段,而不是整个模型

Python Django视图只返回一个特定字段,而不是整个模型,python,django,django-views,django-haystack,Python,Django,Django Views,Django Haystack,我是Django的新手。我试图编写一个视图,返回与搜索词关联的外键模型的字段。我得到的不是整个模型(外键),而是一个特定的字段 这就是问题所在的视图: @csrf_exempt @requires_csrf_token def search_haystack(request): if request.method == 'POST': search_text = request.POST['search'] print search_text el

我是Django的新手。我试图编写一个视图,返回与搜索词关联的外键模型的字段。我得到的不是整个模型(外键),而是一个特定的字段

这就是问题所在的视图:

@csrf_exempt
@requires_csrf_token
def search_haystack(request):
    if request.method == 'POST':
        search_text = request.POST['search']
        print search_text
    else:
        search_text = ''
    results_list= None

    if str(search_text) != "":
        results_dish = SearchQuerySet().models(dish).filter(content=AutoQuery(request.POST.get("search", "")))
            for result in results_dish:
                print result.resto
                print result.resto.name
                print result.resto.area
            results_list = [{'resto_id':result.resto.id , 'name' :result.resto.name, 'area' :result.resto.area} for result in results_dish]
    else:
        results = None
    print results_list
    print encodeToJsonHaystack(results_list)
    return HttpResponse(encodeToJsonHaystack(results_list), mimetype = "application/json")
型号:

class resto(models.Model):
    id = models.AutoField("id", max_length=100, unique=True, primary_key=True)
    area=models.CharField("area", max_length = 100,blank = True, null=True)
    name = models.CharField("name", max_length = 100,blank = True, null=True)
    class Meta:
        db_table=u'resto'

    def __unicode__ (self):
        return self.name


class dish(models.Model):
    id = models.AutoField("id", max_length=100, unique=True, primary_key=True)
    resto= models.ForeignKey(resto)
    name = models.CharField("name", max_length = 50,blank = True, null=True)
    class Meta:
        db_table=u'dish'

    def __unicode__ (self):
        return self.name
“print result.resto”行打印resto的名称

print result.resto.name和print result.resto.area不打印任何内容

为什么呢?我需要做什么才能得到resto的所有字段

search_index.py

import datetime
from haystack import indexes
from litchee.models import resto
from litchee.models import dish


class restoIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    name = indexes.CharField(model_attr='name')
    area = indexes.CharField(model_attr='area')

    def get_model(self):
         return resto

    def index_queryset(self, using=None):
    """Used when the entire index for model is updated."""
        return self.get_model().objects.all()


class dishIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    name = indexes.CharField(model_attr='name')
    resto = indexes.CharField(model_attr='resto')

    def get_model(self):
        return dish

    def index_queryset(self, using=None):
    """Used when the entire index for model is updated."""
        return self.get_model().objects.all() #Add support for Is Shutdown

正如我在评论中提到的,您不是在查询Django模型,而是通过Haystack查询搜索引擎。您得到的不是模型的实例,而是。在Dish模型的搜索索引中,
resto
是一个CharField,因此很自然,这是搜索结果中的内容,而不是对另一个模型的引用

您应该能够通过访问每个结果的实际Django模型实例,并从中可以遵循外键


请注意,如果您是Django的新手,您可能希望暂时忘记Haystack,直到您正确理解实际的模型API是如何工作的。您可能根本不需要它。

它有任何值吗?:)对result.resto正在返回result.resto.name应该返回的值。这里根本没有查询Django模型。您正在通过Haystack查询搜索索引。你至少需要发布你的Haystack配置。我不确定你所说的Haystack配置是什么意思。与Django一起使用haystack只需要安装haystack,并将其添加到settings.py
haystack\u CONNECTIONS={'default':{'ENGINE':'haystack.backends.elasticsearch\u backend.elasticsearchengine','URL':'http://127.0.0.1:9200/','索引名称':'干草堆',},
不,您肯定已经创建了SearchIndex类来实际索引您的数据。非常感谢!我对这一点非常陌生,不知道该怎么做(什么代码),即如何使用object属性。我会尽快接受这个答案。