2016-07-11 6 views
0

私はDjangoのクリスピーな形でそれをレンダリングしたい次のフォームを持っています。'fields'と 'form_class'の両方を指定することはできません

これは、これは私のurls.pyプロジェクトのメインファイルである私の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', ] 

です:これは私が持っている私のforms.pyファイルには、私の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'), 

] 

ある

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 

] 

class RehabilitationSessionForm(forms.ModelForm): 

    def __init__(self, *args, **kwargs): 
     # user = kwargs.pop('user', None) 
     super(RehabilitationSessionForm, self).__init__(*args, **kwargs) 
     self.helper = FormHelper() 
     self.helper.add_input(Submit('submit', u'Save')) 

    def save(self, commit=True): 
     rehabilitation_session = super(RehabilitationSessionForm, self).save(commit=False) 
     patient = self.cleaned_data['patient'] 

     if commit: 
      rehabilitation_session.save() 

     return rehabilitation_session 

    class Meta: 
     model = RehabilitationSession 

     widgets = { 
      'pain_extremity':forms.RadioSelect, 
      'upper_extremity':forms.RadioSelect 
     } 
     fields = '__all__' 

テンプレートmedical_encounter_information/templates/medical_encounter_information/rehabilitationsession_form.htmlは次のとおりです。私は私のブラウザでURL http://localhost:8000/sesiones-de-rehabilitacion/nuevo/を入力すると、私は

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

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

</div> 
{% endblock %} 

次取得:私は私のブラウザでURL http://localhost:8000/sesiones-de-rehabilitacion/editar/1を入力

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 

しかし、私は以下を見る:

enter image description here

ビューsesiones-de-rehabilitacion/editar/1RehabilitationSessionUpdate)がレンダリングされ、ビューsesiones-de-rehabilitacion/nuevo/RehabilitationSessionCreate)は、一緒に同じテンプレートを使用することを認識していないため、レンダリングされません。

+1

Createクラスベースのビューに 'fields'メタプロパティをドロップするとどうなりますか?これは動作し、フォームの 'fields'メタプロパティを使用する必要があります。 – raphv

+1

サイドノート: 'RehabilitationSessionCreate'では' form_class'をフォームクラスではなく、_instance_というフォームに設定します。 'form_class = RehabilitationSessionForm'に変更する必要があります。 – knbk

+0

@knbkあまりにも@ -raphvと言っているような、本当です。一緒に情報をありがとう。 – bgarcial

答えて

3

エラーとして、form_classfieldsの両方を表示することはできません。あなたはどちらか

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

    success_url = reverse_lazy('rehabilitationsessions:list') 

form_classを設定することができますそれとも、fieldsを設定することができます。

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

    success_url = reverse_lazy('rehabilitationsessions:list') 

フォーム自体にfieldsを設定することができますので、あなたは、同時にfieldsform_classを設定する必要はありません。

class RehabilitationSessionForm(forms.ModelForm): 
    class Meta: 
     fields = ['patient', ... ] 
関連する問題