2013-06-18 3 views
2

Я читал django-docs, но до сих пор не могу понять, что мне не хватает и что делает не так? Когда я перехожу к URL: url(r'^(?P<calendar_id>\d+)/edit-event/(?P<pk>\d+)/$', views.UpdateEventView.as_view(), name='event_edit'), и обновляю форму, он создает новое событие вместо обновления. код:UpdateView создает новый объект вместо того, чтобы обновлять существующие

models.py:

class Event(models.Model): 
    calendar = models.ForeignKey(Calendar, verbose_name=_("Calendar"), related_name="events") 
    message = models.ForeignKey(Message, verbose_name=_("Message"), related_name="events") 
    recipient = models.ForeignKey(Contact, verbose_name=_("Recipient"), related_name="events") 
    event_date = models.DateField(_("Date")) 
    start_time = models.TimeField(_("Start time")) 
    end_time = models.TimeField(_("End time"), blank=True, null=True) 
    content = models.TextField(_("Event Notes"), blank=True, null=True) 
    location = models.CharField(_("Location of meeting"), blank=True, null=True, max_length=100) 
    # recurring_options = models.IntegerField(choices=RecurringOptions.CHOICES, verbose_name=_("Recurring time")) 

    class Meta: 
     verbose_name = _("Event") 
     verbose_name_plural = _("Events") 

    def __unicode__(self): 
     return self.recipient.name 

    @models.permalink 
    def get_absolute_url(self): 
     return ("events", (str(self.calendar.pk),)) 

    @models.permalink 
    def get_edit_url(self): 
     return ("event_edit", (str(self.calendar.pk), str(self.pk),)) 

views.py:

class UpdateEventView (EventMixin, UpdateView): 

    model = Event 
    form_class = CreateEventForm 

forms.py:

class CreateEventForm(forms.ModelForm): 

    add_new_contact = forms.BooleanField(label=ugettext("Add new contact name") , required=False) 
    new_contact_name = forms.CharField(label=ugettext("New contact name") , required=False) 
    new_contact_phone = forms.CharField(label=ugettext("New contact phone") , required=False) 
    add_new_message = forms.BooleanField(label=ugettext("Add new message") , required=False) 
    new_message = forms.CharField(label=ugettext("New message") , required=False) 
    reminder = forms.TypedMultipleChoiceField(label=ugettext("Reminder Time"), 
             choices=ReminderOptions.CHOICES, 
             widget=forms.CheckboxSelectMultiple, 
             coerce=int, 
             required=True) 

    class Meta: 
     model = Event 
     fields = (
        'recipient', 
        'event_date', 
        'start_time', 
        'message', 
        ) 

    def __init__(self, calendar, *args, **kwargs): 
     self.helper = FormHelper() 
     self.helper.form_class = 'form-inline' 
     self.helper.form_action = reverse('event_create', args=(str(calendar.id),)) 
     self.helper.layout = Layout(
            HTML(""" 
            <div id="div_id_recipient_add" class="control-group"> 
            <a href="#addContact" role="button" class="btn btn-warning" data-toggle="modal">+</a> 
            </div> 
            """), 
            Field('recipient'), 
            placeholder=_("add_new_contact")), 
            Field('event_date', placeholder=_("Date")), 
            Field('start_time', placeholder=_("Start time")), 
            HTML(""" 
            <div id="div_id_message_add" class="control-group"> 
            <a href="#addMessage" role="button" class="btn btn-warning" data-toggle="modal">+</a> 
            </div> 
            """), 
            Field('message', placeholder=_("Message")), 
            placeholder=_("add_new_message")), 
            Field('reminder'), 

            )  


     self.helper.add_input(Submit('submit', _('Add'))) 

     super(CreateEventForm, self).__init__(*args, **kwargs) 
     self.fields['recipient'].queryset=calendar.contacts.all() 
     self.fields['message'].queryset=calendar.messages.all() 

class UpdateEventForm(forms.Form): 

    def __init__(self, *args, **kwargs): 
     self.helper = FormHelper() 
     self.helper.form_class = 'form-inline' 
     self.helper.add_input(Submit('submit', _('Update'))) 

     super(CreateEventForm, self).__init__(*args, **kwargs) 
     submit_button_text = _('Save') 
+0

Почему у вас две группы цифр в вашем регулярном выражении, и почему ни один из них не назван? –

+0

, если вы имеете в виду регулярное выражение в URL-адресе, чем я только что зафиксировал свой пост, и у меня есть 2 (оба с именами) – misschoksondik

+0

Почему вы передаете 'CreateEventForm' в ваш' UpdateEventView'? – sleblanc

ответ

-1

Похоже, что вы используете тот же формы для обновления и создания новых объектов. См. Мой ответ в этом сообщении: How do I use UpdateView? и посмотреть, отвечает ли он на ваш вопрос.

+1

Это прекрасно, если не рекомендуется повторно использовать одну форму django для создания и редактирования экземпляра модели. –

 Смежные вопросы

  • Нет связанных вопросов^_^