bga*_*ial 1 python django django-forms django-views
我有以下形式,我想用Django脆皮形式呈现它。
这是我的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', ]
Run Code Online (Sandbox Code Playgroud)
这是我的urls.py项目主文件:
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
]
Run Code Online (Sandbox Code Playgroud)
这是我的 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'),
]
Run Code Online (Sandbox Code Playgroud)
在我的forms.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__'
Run Code Online (Sandbox Code Playgroud)
模板medical_encounter_information/templates/medical_encounter_information/rehabilitationsession_form.html是:
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block title %}Crear Registro{% endblock %}
{% block content %}
<div>
{% crispy form %}
{% csrf_token %}
</div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中键入URL时,http://localhost:8000/sesiones-de-rehabilitacion/nuevo/我得到以下信息:
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
Run Code Online (Sandbox Code Playgroud)
但是,当我在浏览器中键入URL时http://localhost:8000/sesiones-de-rehabilitacion/editar/1,会看到以下内容:
因为视图sesiones-de-rehabilitacion/editar/1(RehabilitationSessionUpdate)是渲染的,而视图sesiones-de-rehabilitacion/nuevo/(RehabilitationSessionCreate)是不渲染的,所以知道一起使用相同的模板吗?
如错误所示,您无法同时设置form_class和fields视图。您可以设置form_class
class RehabilitationSessionCreate(CreateView):
model = RehabilitationSession
form_class = RehabilitationSessionForm # Not you should *not* have ()
success_url = reverse_lazy('rehabilitationsessions:list')
Run Code Online (Sandbox Code Playgroud)
或者您可以设置fields:
class RehabilitationSessionCreate(CreateView):
model = RehabilitationSession
fields = ['patient', ...]
success_url = reverse_lazy('rehabilitationsessions:list')
Run Code Online (Sandbox Code Playgroud)
您不需要同时设置fields和form_class,因为您可以fields在表单本身上进行设置:
class RehabilitationSessionForm(forms.ModelForm):
class Meta:
fields = ['patient', ... ]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1915 次 |
| 最近记录: |