Вставка данных в базу данных с помощью FullCalendar и Python / Django

#python-3.x #fullcalendar #django-2.0

#python-3.x #полный календарь #django-2.0

Вопрос:

У меня возникли проблемы с вставкой, редактированием и удалением данных о событиях с помощью FullCalendar в веб-приложении, которое я разрабатываю

Я бы хотел, чтобы все работало на одном экране, то есть, когда пользователь выбирает даты в календаре, появляется модал для вставки значений (заголовок и даты), когда вы нажимаете на событие, появляется модал для редактирования события и кнопка для его удаления.

До сих пор я мог сделать следующее:

 <script>

$(document).ready(function () {

    $('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay'
        },
        navLinks: true,
        editable: true,
        eventLimit: true,
        selectable: true,
        selectHelper: true,
        select: function (start, end) {
            $('#cadastrar #start').val(moment(start).format('DD/MM/YYYY HH:mm:ss'));
            $('#cadastrar #end').val(moment(end).format('DD/MM/YYYY HH:mm:ss'));
            $('#cadastrar').modal('show');
        },
    });

});

<script>
  

В шаблоне (agenda/agenda.html ) Я сделал это, что соответствует расписанию и режиму, который открывается при выборе любой даты в календаре.

 
<section class="content">
     <div id='calendar'></div>

    <div class="modal fade" id="cadastrar" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"
         data-backdrop="static">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
                            aria-hidden="true">amp;times;</span></button>
                    <h4 class="modal-title text-center">Cadastrar Evento</h4>
                </div>
                <div class="modal-body">
                    <form role="form" action="" method="post">
                        {% csrf_token %}
                          <div class="form-group">
                              {{form.event_name}}
                          </div>
                          <div class="form-group">
                              {{form.start_date}}
                          </div>
                          <div class="form-group">
                              {{form.end_date}}
                          </div>
                          <div class="form-group">
                              {{form.event_type}}
                          </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</section>
  

В моделях.py создал следующее

 class Event(models.Model):
    event_name = models.CharField(max_length=255, null=True, blank=True)
    start_date = models.DateTimeField(null=True, blank=True)
    end_date = models.DateTimeField(null=True, blank=True)
    event_type = models.CharField(max_length=10, null=True, blank=True)

    def __str__(self):
        return self.event_name

  

число просмотров

 
class AddEventView(CustomCreateView):
    form_class = EventForm
    template_name = "agenda/agenda.html"
    permission_codename = 'add_event'

    def get_context_data(self, **kwargs):
        context = super(AddEventView, self).get_context_data(**kwargs)
        return context

    def get(self, request, *args, **kwargs):
        return super(AddEventView, self).get(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        self.object = None
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            self.object = form.save(commit=False)
            self.object.save()
            return self.form_valid(form)

        return self.form_invalid(form)

class EventsListView(CustomListView):
    template_name = 'agenda/agenda.html'
    model = Event
    context_object_name = 'all_eventos'
    permission_codename = 'view_eventos'

    def get_context_data(self, **kwargs):
        context = super(EventosListView, self).get_context_data(**kwargs)
        return context


class EditEventView(CustomUpdateView):
    form_class = EventForm
    model = Event
    template_name = "agenda/agenda.html"
    permission_codename = 'change_event'

    def get_success_message(self, cleaned_data):

    def get_context_data(self, **kwargs):
        context = super(EditEventView, self).get_context_data(**kwargs)
        return context

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form_class = self.get_form_class()
        form = form_class(request.POST, instance=self.object)

        if form.is_valid():
            self.object = form.save()
            return self.form_valid(form)

        return self.form_invalid(form)

  

url-адреса

    url(r'agenda/add/$',
        views.AddEventView.as_view(), name='addeventview'),

    url(r'agenda/$',
        views.EventsListView.as_view(), name='listeventsview'),

    url(r'agenda/edit/(?P<pk>[0-9] )/$',
        views.EditEventView.as_view(), name='editeventview'),

  

Как мне вызвать modal, чтобы я мог регистрировать, редактировать и удалять события? Пока открывается модальный, но никакой информации не появляется. Проблема, конечно, в представлении, но как мне заставить его создавать, редактировать и удалять на той же странице и в том же режиме?

Комментарии:

1. Просто примечание: moment(start).format не нужно, потому start что это уже момент. start.format будет работать нормально. То же самое для end .

2. Что касается «никакой информации не отображается»… с помощью чего создается HTML {{form.start_date}} ? (Я не знаком с python / Django, только с FullCalendar). Я думаю, что, возможно $('#cadastrar #start') , на самом деле не соответствует никаким элементам и, следовательно, не записывает значение в поле. Но я не знаю, какой идентификатор присваивается элементу HTML, который создается кодом python.

3. Еще одно замечание: $('#cadastrar #start') также не требуется. Поскольку идентификаторы должны быть уникальными в HTML-документе, тогда вы должны иметь возможность просто написать $('#start') , и он найдет элемент с id="start" без необходимости сначала фильтровать до «кадастрового»