2014-03-06 2 views
1

초기 데이터 (CreateView)를 만든 다음 추가 데이터 (UpdateView)를 계속 업데이트하지만 새 데이터를 업데이트하는 동안 다음과 같은 대답을 얻습니다. url.pyDjango CBV Update ValueError 할당 할 수 없음 없음

urlpatterns = patterns('', 
url(r'^lista/$', views.AlumniList.as_view(), name='alumni-lista'), 
url(r'^lista/(?P<page>\d+)$', views.AlumniRedirectMostrar.as_view(), name='alumni-redirect-mostrar'), 
url(r'^mostrar/(?P<pk>\d+)$', views.AlumniRetrieve.as_view(), name='alumni-mostrar'), 
url(r'^mostrar/padres/(?P<pk>\d+)$', views.AlumniRetrievePadres.as_view(), name='alumni-mostrar-padres'), 
url(r'^mostrar/autorizado/(?P<pk>\d+)$', views.AlumniRetrieveAutorizado.as_view(), name='alumni-mostrar-autorizado'), 
url(r'^mostrar/finanzas/(?P<pk>\d+)$', views.AlumniRetrieveFinanzas.as_view(), name='alumni-mostrar-finanzas'), 
url(r'^mostrar/documentos/(?P<pk>\d+)$', views.AlumniRetrieveDocumentos.as_view(), name='alumni-mostrar-documentos'), 
url(r'^inscripcion/$', views.AlumniRegister.as_view(), name='alumni-inscripcion'), 
url(r'^inscripcion/padres/(?P<pk>\d+)$', views.AlumniRegisterPadres.as_view(), name='alumni-inscripcion-padres'), 
url(r'^inscripcion/autorizado/(?P<pk>\d+)$', views.AlumniRegisterAutorizado.as_view(),  name='alumni-inscripcion-autorizado'), 
url(r'^inscripcion/finanzas/(?P<pk>\d+)$', views.AlumniRegisterFinanzas.as_view(),  name='alumni-inscripcion-finanzas'), 
url(r'^inscripcion/documentos/(?P<pk>\d+)$', views.AlumniRegisterDocumentos.as_view(),  name='alumni-inscripcion-documentos'), 
url(r'^preinscripcion/$', views.AlumniPreinscripcion.as_view(), name='alumni-preinscripcion'), 
url(r'^preinscripcion/padres/(?P<pk>\d+)$', views.AlumniPreinscripcionPadres.as_view(),  name='alumni-preinscripcion-padres'), 
url(r'^preinscripcion/autorizados/(?P<pk>\d+)$', views.AlumniPreinscripcionAutorizados.as_view(), name='alumni-preinscripcion-autorizados'), 
url(r'^preinscripcion/finanzas/(?P<pk>\d+)$', views.AlumniPreinscripcionFinanzas.as_view(), name='alumni-preinscripcion-finanzas'), 

views.py

class AlumniPreinscripcion(LoginRequiredMixin, CreateView): 
    model    = models.Alumni 
    form_class   = forms.AlumniFormPreinscripcion 
    context_object_name = 'alumno' 
    template_name  = 'alumni_preinscripcion.html' 
    def get_initial(self): 
     initial = super(AlumniPreinscripcion, self).get_initial() 
     initial['cycle'] = models.ScholarCycle.objects.get(cycle__exact='2014-2015') 
     return initial 
    def get_success_url(self, **kwargs): 
     return reverse('alumni-preinscripcion-padres', kwargs={'pk':self.object.id}) 

class AlumniPreinscripcionPadres(LoginRequiredMixin, UpdateView): 
    model    = models.Alumni 
    form_clas   = forms.AlumniFormPreinscripcionPadres 
    context_object_name = 'alumno' 
    template_name  = 'alumni_preinscripcion_padres.html' 
    def get_sucess_url(self, **kwargs): 
     return reverse('alumni-preinscripcion-autorizados', kwargs='pk':self.object.id}) 

alumni_preinscripcion_padres.html을

ValueError at /preinscripcion/padres/63 
Cannot assign None: "Alumni.cycle" does not allow null values. 
Request Method: POST 
Request URL: http://decroly.administracionescolarmexico.com/preinscripcion/padres/63 
Django Version: 1.5 
Exception Type: ValueError 
Exception Value:  
Cannot assign None: "Alumni.cycle" does not allow null values. 
Exception Location: /home/fbenavides/webapps/django/lib/python2.7/django/db/models/fields/related.py in __set__, line 401 
Python Executable: /usr/local/bin/python 
Python Version: 2.7.5 

Model.py

# -*- coding: utf-8 -*- 
# Create your models here 
from django.db import models 
from django.forms import ModelForm 
from django.conf import settings 
from django.core.files.storage import FileSystemStorage 
import os.path 
import datetime 

# Create your models here 
class ScholarCycle(models.Model): 
""" 
ScholarCycle 
Yearly School Cycle (e.g. 2012-2013) 
""" 
cycle = models.CharField(blank=False, max_length=9, verbose_name=u'Ciclo Escolar') 

def __unicode__(self): 
    return u'%s' % self.cycle 

class Meta: 
    db_table = u'Ciclo Escolar' 
    ordering = ['id', 'cycle'] 
    verbose_name = u'Ciclo Escolar' 
    verbose_name_plural = u'Ciclos Escolares' 

class Admin: 
    pass 

fs_photos = FileSystemStorage(location='/media/user/photos') 
fs_docs = FileSystemStorage(location='/media/user/docs') 

class Alumni(models.Model): 
""" 
""" 
cycle = models.ForeignKey(ScholarCycle, unique=False, null=False, blank=True, verbose_name=u'Ciclo Escolar') 

: 나는 코드의 relvelant 부품을 부착하고

{% extends "preinscripcion.html" %} 
{% load i18n %} 
{% load l10n %} 

{% block content %} 
    <h2>Padres</h2> 
    <form action="" method="post" enctype="multipart/form-data" accept-charset="utf-8"> 
    {% csrf_token %} 

    <fieldset> 
     <legend><strong>&nbsp;Pap&aacute;&nbsp;</strong></legend> 
     <div class="row-fluid"> 
     <div class="span2"> 
      <p>Nombre:</p> 
     </div> 
     <div class="span10"> 
      <p>{{ form.father_name }} {{ form.father_familynames }}</p> 
     </div> 
     </div> 

    <br /> 
    <p><input type="submit" value="Persona(s) Autorizada(s) &rarr;" /></p> 
    </form> 
{% endblock %} 

답변

0

동문 모델의 cycle 필드는 null=False, blank=True으로 정의됩니다. 당신은 아마 그것을 바꾸고 싶다. 올바른 값은 응용 프로그램 논리에 따라 다르지만이 값은 양식보기와 다르게 작동하기 때문에 값을 말할 수 없습니다. documention에서 :

공백은 유효성 검증과 관련이있는 반면 null은 순수하게 데이터베이스와 관련됩니다. 필드에 blank = True가 있으면 양식 유효성 검사에서 빈 값을 입력 할 수 있습니다. 필드에 blank = False가 있으면 필드가 필요합니다.

전체 절을 읽으십시오. 모델 필드에 대한 적절한 설정을 이해하면 양식 및 클래스 기반보기가 정상적으로 작동합니다. (특별히 당신이 UpdateView에 그렇게하지 않고 업데이트 양식이 빈/빈 값이 괜찮습니다 생각하는 반면, 널 (null) 기준을 만족 initial['cycle']을 설정하기 때문에 참고로, 귀하의 CreateView이 작동하는 이유입니다.)

업데이트 :AlumniPreinscripcionPadres보기에 두 개의 오타가 있는데, get_sucess_url()form_clas 두 문자가 누락되었습니다.

+0

감사합니다. JCotton !!! :) 나는 동창생과 ScholarCycle 모두를 도적질하고 당신이 지적한 것을 보았습니다. 나는 모두 null = True와 blank = True와 일치했다. 이제 오류가 발생하지 않지만 저장할 수 없으며 동일한 업데이트 페이지로 돌아갑니다. 로그에는 어떤 종류의 오류도 표시되지 않습니다. – Francisco

+0

@ francisco 내 업데이트 된 답변을 보았습니까? 이 문제를 해결 했습니까? – JCotton

+0

JCotton에게 오타를 해결해 주셔서 감사합니다. – Francisco

관련 문제