2017-02-02 21 views
5

lập trình người mới ở đây. Tôi có một mô hình với nhiều hàng và tôi muốn vượt qua mỗi hàng để javascript.QuerySet không phải là JSON Serializable Django

nỗ lực đầu tiên:

Views.py

events = Events.objects.filter(user_id=user_id) // filter by user_id 
context = { 
      "email": request.user.email, 
      "login": True, 
      "objects": events, 
     } 
return render(request, 'fullcalendar/index.html', context) 

Events là tên của bảng và tôi lưu trữ mỗi hàng trong events. Thông qua đó vào một dict gọi là context mà sau đó được chuyển đến mẫu của tôi. Sau đó, từ mẫu của tôi, tôi đã có thể làm điều gì đó như thế này:

{% for object in objects %} 
    <p>event.column_name</p> 
{% endfor %} 

và điều đó sẽ hoạt động tốt, tuy nhiên tôi không thể làm điều đó trong phần javascript.

{% for object in objects %} 
    var date = object.date // assuming object has a column named date 
{% endfor %} 

Second Cố gắng

Vì vậy, tôi đã làm một số nghiên cứu và quyết định sử dụng json.

Trong Views.py tôi thực hiện thay đổi sau đây:

return render(request, 'fullcalendar/index.html', {"obj_as_json": simplejson.dumps(context)}) 

và từ này, tôi hy vọng sẽ làm được điều này:

var objects = {{ obj_as_json }} 

for object in objects 
    //Do some stuff 

Nhưng tôi đã nhận lỗi QuerySet is not JSON Serializable Django. Vì vậy, tôi ngẩng đầu lên làm thế nào để serialize đối tượng và thực hiện thay đổi sau đây:

data = serializers.serialize('json', events.objects.all()) 

Nhưng tôi có lỗi sau: 'QuerySet' object has no attribute 'objects'

Man, theres đã nhận được một cách dễ dàng hơn để làm những gì tôi muốn làm. Bất kỳ ý tưởng?

Trả lời

2

Hãy thử điều này thay vì:

data = serializers.serialize('json', events)

Các thông báo lỗi bạn đã được nói với bạn rằng events đã là một QuerySet, không có lý do để cố gắng và làm bất cứ điều gì nhiều hơn với nó.

Bạn cũng có thể xem xét lại nỗ lực trước đó của bạn:

{% for object in objects %} 
    var date = object.date // assuming object has a column named date 
{% endfor %} 

Bạn cần phải thực sự sử dụng Django object như thế này:

{% for object in objects %} 
    var date = {{ object.date }} 
{% endfor %} 

Cách bạn đã làm nó trước khi object sẽ chỉ đơn giản là undefined và bạn sẽ gặp lỗi cannot read property date of undefined

Các vấn đề liên quan