Python Django视图只返回一个特定字段,而不是整个模型
我是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
@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属性。我会尽快接受这个答案。