Как кто-то, кто немного знаком с классами, я решил использовать их для управления некоторыми диаграммами в приложении, над которым я работаю.Передача запроса (пользователя) на класс, основанный на представлении
Однако я хотел бы сделать эту диаграмму динамичной и хотел бы, чтобы она изменилась в зависимости от того, кто ее видит.
Как можно передать запрос (чтобы получить пользователя) в представлении на основе класса?
Ниже моя нерабочим реализация (работа с фиктивными данными, но никакой запрос не передается):
Вид:
class LineChartJSONView(BaseLineChartView, request):
user = request.user
def get_labels(self):
labels = []
items = Item.objects.filter(user = user)
for i in items:
labels.add(i.name)
return labels
def get_data(self):
prices = []
items = Item.objects.filter(user = user)
for i in items:
prices.add(i.price)
return prices
line_chart = TemplateView.as_view(template_name='dashboard/test_chart.html')
line_chart_json = LineChartJSONView.as_view()
URL:
url(r'^chart_data/$', LineChartJSONView.as_view(), name='line_chart_json'),
url(r'^chart/$', views.ViewBaseChart, name='basic_chart'),
HTML:
{% load staticfiles %}
<html>
<head>
<title>test chart</title>
</head>
<body>
<canvas id = "myChart" width="500" height="200"></canvas>
<!-- jQuery 2.2.3 -->
<script src="{% static 'plugins/jQuery/jquery-2.2.3.min.js' %}"></script>
<!-- Bootstrap 3.3.6 -->
<script src="{% static 'bootstrap/js/bootstrap.min.js' %}"></script>
<!-- ChartJS 1.0.1 -->
<script src="{% static 'plugins/chartjs/Chart.min.js' %}"></script>
<!-- FastClick -->
<script src="{% static 'plugins/fastclick/fastclick.js' %}"></script>
<!-- AdminLTE App -->
<script src="{% static 'dist/js/app.min.js' %}"></script>
<!-- AdminLTE for demo purposes -->
<script src="{% static 'dist/js/demo.js' %}"></script>
<!-- page script -->
<script type="text/javascript">
$.get('{% url "line_chart_json" %}', function(data)
{
var ctx =
$("#myChart").get(0).getContext("2d");
new Chart(ctx).Line(data);
});
</script>
</body>
</html>
View (для статического выше - не classbasedview):
def ViewBaseChart(request):
context = {}
template = "dashboard/test_chart.html"
return render(request,template,context)
Я не уверен, что я использую понятие вида на основе класса правильно здесь, однако, обнаружили, что это единственный способ до сих пор внедрять схемы.
Внутри методов класса вы можете получить доступ к запросу с 'self.request' –
да. вы бы хотели переопределить методы get, post, put (или метод get_object). Хороший ресурс здесь: https://docs.djangoproject.com/en/1.10/topics/class-based-views/intro/ – Corgs