Django каркас, сырой в сетке - PullRequest
1 голос
/ 16 марта 2020

Я разрабатывал приложение в djanog 3.0 для своей жены. Получил хороший модальный ajax и работает для сетки, но ей не нравится модальный эффект, она просто хочет редактировать внутри строки и всегда иметь пустую строку внизу для новых записей.

Я посмотрел на table2 и jqgrid, но не смог найти что-то, что работает так. Сейчас я играю с сеткой editablegrid. net js, и я могу отображать данные и редактировать, но не сохранять отредактированные данные. Editablegrid - хороший пример того, что моя жена хотела бы сделать без пустого нового ряда, но должна иметь возможность взломать это.

Очевидно, что я не смогу сделать ряд из, поэтому Мне нужно выяснить, как сделать мои последовательные данные такими, как json. Затем мне также нужен токен CSRF как часть json верно?

Я далеко от своей глубины, когда я разрабатываю встроенный c для жизни, и все это самообучается, как мы go.

Вопросы: какая сетка лучше всего подходит для этого? Это вообще возможно? django даже подходит для чего-то подобного? Должен ли я поворачиваться и go с оставшимся API и смотреть на некоторые другие технологии, такие как реагировать?

РЕДАКТИРОВАТЬ 1: Я попытался @Raiyan предложение следующим образом:

{% for person in persons %}
<form id="F{{ person.pk}}" method="post" action="{% url 'person-update' person.pk %}" class="js-ajax-update-form" update-table-name="ajax-table">
  {% csrf_token %}
  <tr>
    <td>{{ person.title }}</td>
    <td>{{ person.first_name }}</td>
    <td>{{ person.last_name }}</td>
    <td>{{ person.id_number }}</td>
  </tr>
</form>
{% endfor %}

, но если я открою страницу и посмотрите на html это выглядит так:

<form method="post"></form>
<input type="hidden" name="csrfmiddlewaretoken" value="IREdUDr8bplgvDrtmMSSjOua2NL98SXnoeIGdX1mN0nY2hpQTByW0FfJZxvO5kCw">
<tr id="R2">
    <td>Mr.</td>
    <td>John</td>
    <td>Doe</td>
        <td>123456789</td>
</tr>
</tbody>

По какой-то причине тег формы закрывается перед строкой таблицы и вводом. Я также адаптировал простое приложение CRUD books , чтобы попытаться получить желаемое поведение ни с одним из сообщений, но там также закрывается тег формы. Для приложения CRUD я изменил представление fbv:

def book_list(request, template_name='books_fbv/book_list.html'):
    books = Book.objects.all()
    forms = []
    for index, book in enumerate(books):
        forms.append(BookForm(request.POST or None, instance=book, prefix="form_{}".format(index)))
    data = {}
    data['object_list'] = forms

    if request.method == 'POST':
        for form in forms:
            if form.is_valid():
                action = form.save(commit=False)
                action.save()
    return render(request, template_name, data)  

и html на:

<table>
    <thead>
        ...
    </thead>
    <tbody>
        {% for book in object_list %}
        <form method="POST">
            {% csrf_token %}
        <tr>
            <td>{{ book.name }}</td>  
            <td>{{ book.pages }}</td>
        </tr>
        </form>
        {% endfor %}
    </tbody>
</table>

Есть идеи, почему теги форм закрываются так?

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Я согласен со всем, что сказал @Raiyan, но просто хотел высказать свое мнение по этому поводу.

она просто хочет редактировать внутри строки и всегда иметь пустую строку внизу для новых записей.

Похоже, ваша жена хочет чего-то очень динамичного и динамичного c, что для меня означает, что внешний интерфейс (или сторона клиента) должен быть более активным. Хотя вы можете достичь аналогичного результата с помощью Django или других опций «рендеринга сервера», использование Rest API и Javascript даст вам гораздо большую гибкость.

React является примером (как вы упомянули), но в зависимости от вашего проекта вам не нужно go там. Вы все еще можете использовать Django для создания своего API и простой Javascript (или даже jQuery) для вызова API. Это позволило бы вам динамически создавать новые строки, удалять данные и манипулировать контентом, не перезагружая страницу (что, как я считаю, является желательным эффектом сглаживания).

Вот несколько ссылок:

AJAX в jQuery: https://api.jquery.com/jquery.ajax/

Rest API в Django: https://medium.com/@BennettGarner / build-your-first-rest-api-with- django -отдый-каркасный e394e39a482 c

0 голосов
/ 16 марта 2020

Django очень хорошо подходит для таких проектов, как этот.

Очевидно, я не смогу составить строку из

Я думаю, вы можете , если я что-то не так понял. Вы можете отобразить каждую строку как отдельную форму, используя Django шаблоны. Реализация может выглядеть так:

{% for row in rows %}
<form method="post">
<tr>
  <td>...</td>
  ...
</tr>
</form>
{% endfor %}

Вы правы, что вам нужно обработать токен CSRF. Django позволяет вставлять токен CSRF в любое место отрисовки HTML, используя {% csrf_token %} в вашем шаблоне. Очень простая форма будет выглядеть следующим образом:

<form method="post">{% csrf_token %}... </form>

В вашем случае каждая из строк будет выглядеть следующим образом:

{% for row in rows %}
<form method="post">
{% csrf_token %}
<tr>
  <td>...</td>
  ...
</tr>
</form>
{% endfor %}

Подробнее об этом здесь: https://docs.djangoproject.com/en/3.0/ref/csrf/#how -to-use-it

Надеюсь, это поможет.

...