2016-07-11 18 views
0

Ich habe folgendes Formular, das ich es mit Django knusprigen Formen rendern möchte.Angabe von 'fields' und 'form_class' ist nicht erlaubt

Das ist mein views.py

class RehabilitationSessionCreate(CreateView): 
    model = RehabilitationSession 
    form_class = RehabilitationSessionForm() 

    success_url = reverse_lazy('rehabilitationsessions:list') 

    fields = ['patient','medical','therapist','status','date_session_begin','upper_extremity', 
       'pain_extremity','affected_segment','movement','metrics','time_movement','games', 
       'game_levels','iterations','errors_numbers_game','time_level_acomplished', 
       'patient_behavior','observations','date_session_end','period',] 

class RehabilitationSessionUpdate(UpdateView): 
    model = RehabilitationSession 
    success_url = reverse_lazy('rehabilitationsessions:list') 
    fields = ['patient', 'medical', 'therapist', 'status', 'date_session_begin', 'upper_extremity', 
       'pain_extremity', 'affected_segment', 'movement', 'metrics', 'time_movement', 'games', 
       'game_levels', 'iterations', 'errors_numbers_game', 'time_level_acomplished', 
       'patient_behavior', 'observations', 'date_session_end', 'period', ] 

Das ist mein urls.py Projekt Hauptdatei ist:

from django.conf.urls import url, include 
urlpatterns = [ 

    url(r'^sesiones-de-rehabilitacion/', include('medical_encounter_information.urls', namespace='rehabilitationsessions')), 
    # Call the medical_encounter_information/urls.py 

] 

Das ist mein medical_encounter_information/urls.py

from django.conf.urls import include, url, patterns 
from .views import RehabilitationSessionCreate 

urlpatterns = [ 

    url(r'^$', RehabilitationSessionList.as_view(), name='list'), 

    url(r'^(?P<pk>\d+)$', RehabilitationSessionDetail.as_view(), name='detail'), 

    url(r'^nuevo/', RehabilitationSessionCreate.as_view(), name='new'), 

    url(r'^editar/(?P<pk>\d+)$', RehabilitationSessionUpdate.as_view(), name='edit'), 

    url(r'^borrar/(?P<pk>\d+)$', RehabilitationSessionDelete.as_view(), name='delete'), 

] 

In meiner forms.py Datei ich habe:

Die Vorlage medical_encounter_information/templates/medical_encounter_information/rehabilitationsession_form.html ist:

{% extends 'base.html' %} 
{% load crispy_forms_tags %} 
{% block title %}Crear Registro{% endblock %} 
{% block content %} 

<div> 
    {% crispy form %} 
    {% csrf_token %} 

</div> 
{% endblock %} 

Wenn ich in meinem Browser die URL http://localhost:8000/sesiones-de-rehabilitacion/nuevo/ ich folgendes:

File "/home/bgarcial/.virtualenvs/nrhb_dev/lib/python3.5/site-packages/django/views/generic/edit.py", line 138, in get_form_class 
    "Specifying both 'fields' and 'form_class' is not permitted." 
django.core.exceptions.ImproperlyConfigured: Specifying both 'fields' and 'form_class' is not permitted. 
[11/Jul/2016 15:44:29] "GET /sesiones-de-rehabilitacion/nuevo/ HTTP/1.1" 500 100235 

Aber, wenn ich in meinem Browser http://localhost:8000/sesiones-de-rehabilitacion/editar/1 die URL Ich sehe folgendes an:

enter image description here

Da die Ansicht sesiones-de-rehabilitacion/editar/1 (RehabilitationSessionUpdate) wird wiedergegeben, und die Ansicht sesiones-de-rehabilitacion/nuevo/ (RehabilitationSessionCreate) wird nicht rendered wissen, dass zusammen die gleiche Vorlage nehmen?

+1

Was passiert, wenn Sie einfach die Meta-Eigenschaft 'fields' in Ihrer klassenbasierten Ansicht Create löschen? Dies sollte funktionieren und die Meta-Eigenschaft 'fields' aus dem Formular verwenden. – raphv

+1

Randnotiz: In 'RehabilitationSessionCreate' setzen Sie' form_class' auf ein Formular _instance_, keine Formularklasse. Es sollte in 'form_class = RehabilitationSessionForm' geändert werden. – knbk

+0

@knbk Es ist wahr, wie sagt auch @ -raphv. Danke zusammen für die Information. – bgarcial

Antwort

3

Wie der Fehler sagt, können Sie sowohl form_class als auch fields für Ihre Ansicht nicht festlegen. Sie können entweder form_class

class RehabilitationSessionCreate(CreateView): 
    model = RehabilitationSession 
    form_class = RehabilitationSessionForm # Not you should *not* have() 

    success_url = reverse_lazy('rehabilitationsessions:list') 

Oder Sie können fields gesetzt:

class RehabilitationSessionCreate(CreateView): 
    model = RehabilitationSession 
    fields = ['patient', ...] 

    success_url = reverse_lazy('rehabilitationsessions:list') 

Sie sollten nicht fields und form_class zugleich festlegen müssen, da Sie fields auf dem Formblatt kann selbst:

class RehabilitationSessionForm(forms.ModelForm): 
    class Meta: 
     fields = ['patient', ... ]