Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не удаётся добавить данные в базу, Django+MySQL+JQuery 
V
    Опции темы
andro_id
Дата 24.6.2011, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 17.4.2007
Где: Москва

Репутация: нет
Всего: 1



Доброго дня.

У меня есть страничка http://justtrain.ru/exercises/ на которой отображены 2 списка. Один список формируется из записей в БД, второй - пустой. С помощью JQuery Sortable я могу перетаскивать элементы из заполненного списка в пустой.
Идея в том, чтобы по окончании перетаскивания элемента в пустой список, его значение добавлялось в БД.
Как это реализовать, никак не соображу.
Пока получилось только вывести ID элемента в алерт.

Код странички main.html:

Код

<link type="text/css" href="/media/css/smoothness/jquery-ui-1.8.13.custom.css" rel="stylesheet" />
<script type="text/javascript" src="/media/js/jquery-1.5.1.min.js"></script>
<script type="text/javascript" src="/media/js/jquery-ui-1.8.13.custom.min.js"></script>
{% block content %}
<script type="text/javascript">
    $(function() {
        $("#sortable1").sortable({
            connectWith: "#sortable2",
            items: "li",
            update: function(event, ui){
                var order = $('#sortable1').sortable('toArray');
                $.ajax({
                    type: 'POST',
                    data: order,
                    url: '/exercises/'
                });
                alert(order);
            }
        }).disableSelection();
        $("#sortable2").sortable({
            connectWith: "#sortable1"
        })
    });
</script>
<div>
    <ul id="sortable1" class="connectedSortable">
    </ul>

    <ul id="sortable2" class="connectedSortable">
        {% for exercise in exercises %}
        <li id="{{ exercise.id }}" class="ui-itemlist-default">{{ exercise.name }}</li>
        {% endfor %}
    </ul>
</div>
{% endblock %}


Код views.py:

Код

from django.shortcuts import render_to_response
from django.template import RequestContext
from exercises.models import Exercise
from exercises.models import ExerciseInADay

def main(request):
    exercises = Exercise.objects.all().order_by('id')
    return render_to_response('exercises/main.html', {'exercises':exercises})

def saveday(request):
    if request.method == 'POST':
        for i, id in enumerate(request.POST.getlist(order)):
            id = int(id)
            ord[id] = i
            exerciseinaday = ExerciseInADay.objects.all()
            exerciseinaday.sortorder = ord[id]
            exerciseinaday.id = id
        exerciseinaday.save()


Код модели models.py:
Код

from django.db import models

class Exercise(models.Model):
    """
        Table Exercises. List of all exercises.
        """
    name = models.CharField(max_length=250)
    type = models.ForeignKey(Type)
    MechanicsType = models.ForeignKey(MechanicsType)
    EquipmentType = models.ForeignKey(EquipmentType)
    MuscleGroup = models.ForeignKey(MuscleGroup)
    description = models.CharField(max_length=250, blank=True)

    def __unicode__ (self):
        return self.name
    
class ExerciseInADay(models.Model):
    """
        Table ExerciseInADay. List of exercises per training day.
        """
    exercise = models.ForeignKey(Exercise)
    sortorder = models.PositiveIntegerField('sortorder', default=0)

    def exerciseid(self):
        return self.exercise


Во вьюшке main заполняеть список из базы, saveday - должен заполнять другую табличку, при добавлении в пустой список элемента.
Кто-нибудь, помогите разобраться в связке django, jquery и mysql.


PM MAIL WWW ICQ Skype   Вверх
Stolzen
Дата 25.6.2011, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 1
Всего: 48



Цитата(andro_id @  24.6.2011,  22:19 Найти цитируемый пост)
url: '/exercises/'

Какая функция прибита сюда? Покажите urlconf.

А вообще попробуйте при перетаскивании делать getJSON по этом адресу, а в самой функции напишите что-нибудь типа 
Код

from django.utils import simplejson
 
    @transaction.commit_on_success
    def exercises(self, request, entity_name, object_id):
        # ... логика ...

        entity.save()
        json = simplejson.dumps({'success': True, ....})
        return HttpResponse(json, mimetype='application/json')


Django и ajax пример


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
andro_id
Дата 25.6.2011, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 17.4.2007
Где: Москва

Репутация: нет
Всего: 1



В главном urls.py примаплен дополнительный
Код

# Map exercises app
    url(r'^exercises/', include('exercises.urls')),


В дополнительном 
Код

urlpatterns = patterns('',
    # Exercise Base list
    url(r'^$', 'exercises.views.main'),
    url(r'^post/', 'exercises.views.saveday'),
)


Здесь по-идее, по ссылке ../exercises/post/ должна происходить вставка. Но мне так не надо. Мне надо, чтобы не было перехода на другую страницу. Надо чтобы проверялось наличие POST данных и, если их нет - просто грузилась страница, а если есть, т.е. было произведено перетаскивание объекта - производилась запись в БД.

Т.о. код views.py должен выглядеть как-то так:
Код

def main(request):
    if request.method == 'POST':
        for i, id in enumerate(request.POST.getlist(order)):
            id = int(id)
            ord[id] = i
            exerciseinaday = ExerciseInADay.objects.all()
            exerciseinaday.sortorder = ord[id]
            exerciseinaday.id = id
        exerciseinaday.save()
    else:
        exercises = Exercise.objects.all().order_by('id')
        return render_to_response('exercises/main.html', {'exercises':exercises})

и вторая строчка с post/ в urls тогда не нужна.


Это сообщение отредактировал(а) andro_id - 25.6.2011, 10:56
PM MAIL WWW ICQ Skype   Вверх
Stolzen
Дата 25.6.2011, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 1
Всего: 48



Так вы асинхронно хотите добавлять или нет? Если да, то POST не подходит. Вам нужен AJAX - XML или JSON.
Попробуйте сделать так, как написано по ссылке. 


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
gomer999999999
Дата 3.2.2013, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 3.2.2013

Репутация: -1
Всего: -1



Добрый день.
Предлагаем к рассмотрению и тестированию наш проект - Маркетер Плагин.
Продвигаем его успешно во всем мире. Но только 27 января 2013 предоставили в Рунете к тестированию русифицированный плагин с русифицированным интерфейсом. Вся подробная информация наhttp://www.marketerplugin.ru/ 
Предлагаем протестировать наш плагин на только что русифицированном интерфейсеhttp://www.marketerplugin.ru/test_plagina.
В двух словах: плагин предназначен для создания сайтов-визиток и страниц продаж.
Ждем ваших комментариев, отзывов и критики.
Так же будем рады видеть вас на наших страницах в соц сетях
http://www.facebook.com/pages/Marketer-plugin/5288148..
http://vk.com/club46912629
Успехов и новых впечатлений.
С уважением, Богдан
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Веб-разработка и фреймворки | Следующая тема »


 




[ Время генерации скрипта: 0.0962 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.