Я новичок в использовании Django или даже создании веб-сайта, поэтому, пожалуйста, несите меня, если я предоставил слишком мало/подробно о проблеме, с которой я сталкиваюсь. Кроме того, я потратил большую часть прошлой недели троллинг SO-страниц, блогов, учебников Django, документации Django и т. Д., Пытаясь решить проблему самостоятельно. Возможно, я что-то упустил, или мне просто не повезло, но ничего, что я нашел, не затрагивает мою конкретную ситуацию во всей ее полноте. Большинство примеров, похоже, сосредоточены на обработке запросов в views.py, а не на том, как выполняется первоначальный запрос в шаблоне Django.Выполнение запроса шаблона django html с несколькими ключевыми значениями
У меня есть шаблон Django, view_table.html, который отображает объект таблицы BootTrap DataTable для пользователя. Второй столбец этой таблицы - BigIntegerField, называемый MyRow_ID. Я в настоящее время имеет код в MyCode.js, что позволяет пользователю выделить несколько строк, и при нажатии кнопки modify_button щелчка по MyRow_ID значения для выбранных строк (например, [2, 13, 14]) фиксируются в JS dict под названием sent_data. После того, как эти значения были захвачены, я хотел бы получить modify_button, чтобы создать запрос GET, который отправит sent_data вместе с ним. После согласования в urls.py и вызывая modify_data функцию в views.py, modify_data должны оказывать новую страницу modify_table.html при переходе обратно экземпляров модели, соответствующие MyRow_ID для того, чтобы отобразить только данные выбранных строк. Я думаю, что я очень близко, и, возможно, только твик в регулярное выражение, что мне нужно, но вот мои вопросы:
- Как создать запрос GET в шаблоне Django view_table.html который проходит sent_data дальше к Django? В настоящее время я использую форму с методом и действия атрибуты, установленные в "GET" и "{% URL 'modify_data' sent_data = sent_data%}" соответственно. Я предполагаю, что GET, а не POST, должен использоваться, потому что запрос не модифицирует бэкэнд, это скорее тип запроса «фильтровать вид». Это правильное предположение? Как выглядит запрошенный url? Скажем Значения MyRow_ID [2,13,14]. Будет ли запрос получения выглядеть примерно так: /modify_data/matched_row_1 = 2 & matched_row_2 = 13 & matched_row_3 = 14? Должен ли я сам создать эту строку url в шаблоне, итерации по sent_data и прикрепления строки «matched_row_n =» или есть простой способ для шаблона создать это автоматически в запросе?
- Что правильный шаблон регулярного выражения, которые должны быть использованы в MyApp/urls.py, учитывая sent_data может быть от 1 до п уникального MyRow_ID значения, при условии, от 1 до п строк выбираются соответственно? (Очевидно, что надежный код будет включать обработку, в которой выбраны 0 строк, и нажата кнопка modify_button, но давайте отложим это на время.) В настоящее время я получаю ошибку NoReverseMatch в/myapp/view_data /: Обратный для 'modify_data' с аргументами '()' и аргументами ключевого слова '{u'sent_data': ''} 'не найден. Я новичок в использовании регулярного выражения, и я знаю, что у меня есть в . Myapp/urls.py неправ.
- Является ли код myapp/views.py правильно фильтровать соответствующие экземпляры модели и визуализировать modify_table.html с выбранными строками?
view_table.html:
<!DOCTYPE html>
<html>
<head>
## Bunch of code… ##
</head>
<body>
<div class="col col-xs-12 text-right">
<form style="display" method="get" action="{% url 'modify_data' sent_data=sent_data %}">
<button id="modify_button" type="button" class="btn btn-primary btn-create">Modify Data</button>
</form>
</div>
<br><br><br>
<table id="my_table">
## Code that displays my_table ##
</table>
<!-- Execute JS scripts -->
<script type="text/javascript" src="{% static "myapp/js/jquery-1.12.0.min.js" %}"></script>
<script type="text/javascript" src="{% static "myapp/js/jquery.dataTables.min.js" %}"></script>
<script type="text/javascript" src="{% static "myapp/js/bootstrap.min.js" %}"></script>
<script type="text/javascript" src="{% static "myapp/js/dataTables.bootstrap.min.js" %}"></script>
<script type="text/javascript">
var sent_data = [];
</script>
<script type="text/javascript" src="{% static "myapp/js/MyCode.js" %}"></script>
</body>
</html>
MyCode.js:
$(document).ready(function(){
var oTable = $('#my_table').DataTable();
var selected_data = [];
$('#my_table tbody').on('click','tr',function(){
$(this).toggleClass('active');
});
$('#modify_button').click(function(event){
selected_data = $.map(oTable.rows('.active').data(), function (item) {
return item[1]
});
sent_data = { 'modify_rows': selected_data };
});
});
Я должен отметить, что я использую MyRow_ID и не родной DataTable атрибут rowID, потому что я предполагаю автоматизацию DataTable tically-created rowID не соответствуют автоматически созданным основным ключам (pk), которые использует Django. Это правильное предположение?
MyApp/urls.py:
from django.conf.urls import url
from . import views
from .models import MyDataModel
urlpatterns = [
url(r'^view_data/$', views.view_data, name='view_data'),
url(r'^modify_data/(?P<sent_data>\d+)/$', views.modify_data, name='modify_data'),
]
MyApp/views.py:
from django.forms import modelformset_factory
from django.shortcuts import render
from django.http import HttpResponse
from .models import MyDataModel
def view_data(request):
myData = MyDataModel.objects.all()
return render(request, 'myapp/view_table.html', {'myData': myData})
def modify_data(request, sent_data):
MyDataFormSet = modelformset_factory(MyDataModel, fields=('MyRow_ID','MyRow_Text'))
if request.method == 'GET':
selected_rows = sent_data['modify_rows']
## selected_rows = request.GET['modify_rows']
formset = MyDataFormSet(queryset=MyDataModel.objects.filter(MyRow_ID__in=selected_rows))
selected_data = MyDataModel.objects.filter(MyRow_ID__in=selected_rows)
return render(request, 'myapp/modify_data.html', {'formset': formset, 'selected_data': selected_data})
else:
return HttpResponse('A GET request was not received.')
Наконец, modify_data.html:
<!DOCTYPE html>
<html>
<head>
## Bunch of code… ##
</head>
<body>
<div class="col col-xs-12 text-right">
<form method="post" action="">
{% csrf_token %}
{{ formset }}
<button id="submit_changes" type="button" class="btn btn-primary btn-create">Submit Changes</button>
</form>
</div>
<br><br><br>
<table id="selected_rows_table">
## Code that displays selected rows passed as selected_data ##
</table>
</body>
</html>
Любая помощь очень ценится, спасибо заранее!