Vous n'êtes pas identifié(e).
Bonjour,
Tout d'abord je suis débutant avec Django.
J'aimerai savoir comment autoriser l'insertion d'une NULL dans un champ CharField.
Dans mon exemple je dois pouvoir insérer un enregistrement en laissant le champ "nomfichier" vide.
Comment faire?
Voici ma classe:
class Projet(models.Model):
donnee = models.ForeignKey(Donnee)
id_fedora = models.CharField(max_length=50, blank=True)
code = models.CharField(max_length=50)
label = models.CharField(max_length=250)
datecreation = models.DateField('date published')
nomfichier = models.CharField(max_length=250, null=True, blank=True)
def __unicode__(self):
return self.label
Voici ma vue pour l'insertion d'un nouveau record:
def detailneuf(request):
if request.method == "POST":
vl_monform = ProjetForm(request.POST)
vl_monform.save()
return redirect('/projets/forms/new/')
else:
vl_monform = ProjetForm()
return render_to_response('projects/newprojet.html', {'pe_monform': vl_monform},
context_instance = RequestContext(request))
Merci d'avance pour l'aide.
Hors ligne
ton code est ok (blank=True, null=True)
le souci vient surement du fait que tu as fait un "manage.py syncdb" avant de rajouter ces options-là
du coup, ta base de données n'autorise pas la valeur nulle
soit tu recrée ta base et tu refais un syncdb, soit tu regarde du coté de South, un utilitaire de migration qui fait évlouer la db selon les changements de tes modèles.
Hors ligne
Alors j'ai recréé ma table mais j'ai toujours le même problème.
Le message est le suivant:
"The Projet could not be created because the data didn't validate"
Ici je mets aussi le code de mon template:
{% extends "base.html" %}
{% block scripts %}
{{ pe_monform.media }}
<script>
$(function() {
$( "#id_datecreation" ).datepicker();
});
</script>
{% endblock %}
{% block content %}
<table>
<form method="post" action="/projets/forms/new/">{% csrf_token %}
{{ pe_monform.as_table }}
<tr>
<td> </td>
<td><input type="submit" name="save" value="Save"></td>
</tr>
</form>
</table>
{% endblock %}
Voici aussi le code de mon form:
class ProjetForm(ModelForm):
code = CharField(widget = TextInput(attrs = {'size': 20}), label = 'Project Code')
label = CharField(widget = Textarea(attrs = {'cols': 25, 'rows': 10}), label = 'Project Label')
nomfichier = CharField(widget = TextInput(attrs = {'size': 70}), label = 'File Name')
datecreation = DateField(widget = CalendarWidgetJquery, label = 'Creation Date')
class Meta:
model = Projet
fields = ('donnee', 'code', 'datecreation', 'label', 'nomfichier')
Si dans ma classe ProjetForm je supprime la colonne "nonfichier" et que j'essai d'insérer un enregistrement, ça fonctionne.
Je ne comprends plus rien :-(
Hors ligne
J'ai trouvé.
Le problème était au niveau de mon form (class ProjetForm).
Avant j'avais le code suivant et ça ne fonctionnait pas:
nomfichier = CharField(widget = TextInput(attrs = {'size': 70}), label = 'File Name').
J'ai ajouté "required=False" dans mon widget et maintenant j'ai le code suivant:
nomfichier = CharField(widget = TextInput(attrs = {'size': 70}), required=False, label = 'File Name').
Et ça fonctionne.
Hors ligne