我有以下视图,它返回三个不同模型员工,见证和技能的数据,它完全有效。
Views.py
@page_template("app/profession.html") # just add this decorator
def profile(request, template="app/profession.html",
extra_context=None):
context = {
'employ_V': Employees.objects.get(id = 45),
'testim_V':Testimonial.objects.get(id = 45),
'skills_V':Skills.objects.filter(id = 45),
}
if extra_context is not None:
context.update(extra_context)
return render_to_response(template, context,
context_instance=RequestContext(request))
如果您看到,将只为Employees和Testimonial模型返回一条记录(查询中的 Notice objects.get()) 而技能模型有超过1条记录(它返回id,技能,超过5行的订单字段)。
是否可以使用相同的视图将技能作为Json格式以及Employee和Testimonial返回到我的模板(纯文本和JSON)? 或者我应该使用单独的视图以Json格式返回技能模型的数据? 在这种情况下,最好的方法是什么。
在Skills的单独视图中 - 我可以用JSON格式成功实现结果 - 为此我使用了客户序列化器和JsonResponse。
答案 0 :(得分:1)
您可以在查询集中使用Django values
,但如果您需要特殊转换(如图片的缩略图等),请添加到您的模型as_dict
方法
class YourModel(models.Model):
# here your fields
def as_dict(self):
context = {
'pk': self.id,
'name': self.name,
# ...
}
return context
然后在你的观点中
# import section
from django.utils.safestring import mark_safe
# ...
@page_template("app/profession.html") # just add this decorator
def profile(request, template="app/profession.html", extra_context=None):
employ_v_obj = Employees.objects.get(id=45)
testim_v_obj = Testimonial.objects.get(id=45)
skills_v_qs = Skills.objects.filter(id=45)
skills_v_json_list = [obj.as_dict() for obj in skills_v_qs]
context = {
'employ_V': employ_v_obj,
'testim_V': testim_v_obj,
}
context['skills_V_json'] = mark_safe(json.dumps(skills_v_json_list, ensure_ascii=False))
if extra_context is not None:
context.update(extra_context)
return render_to_response(template, context, context_instance=RequestContext(request))