创建初始数据(CreateView)后,我继续更新更多数据(UpdateView),但在tring更新新数据时我得到以下答案。我附上的代码relvelant部分:Django CBV更新ValueError无法分配无
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')
url.py
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
{% 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> Papá </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) →" /></p>
</form>
{% endblock %}
谢谢JCotton !!! :)我歪歪校友和ScholarCycle,看到你指出。我匹配了两个,所以null = True和blank = True。现在我没有收到错误信息,但我无法保存并返回到同一更新页面。日志不会显示任何类型的错误。 – Francisco
@francisco你有没有看到我更新的答案?你解决了这个问题吗? – JCotton
谢谢JCotton,解决拼写错误使一切工作! – Francisco