2016-07-28 1 views
0

Ich möchte ein Ereignis auswählen und ein Foto hochladen, aber wenn ich Migrationen mache, gibt es NOT NULL Constraint fehlgeschlagen: myapp_doc.event Fehler.NOT NULL Constraint fehlgeschlagen Fehler

Ich bekomme den Fehler auch nach dem Löschen der Ansicht. Was soll ich machen ?

Modelle

class Doc(models.Model): 
    events = (
     (None, "choose one of it"), 
     ('bbq', 'Barbeque '), 
     ('meet', 'Meeting'), 
    ) 
    doc = models.FileField(upload_to='uploads/') 
    user = models.ForeignKey(User, null=False, blank=True) 
    event = models.CharField(max_length=15, choices=events, null = True) 
    def __unicode__(self): 
     return unicode(self.user) 

Ansicht

def upload_file(request): 
    user= request.user 
    form = UploadFileForm(request.POST, request.FILES) 
    if form.is_valid(): 
     doc = form.save(commit=False) 
     doc.user = request.user 
     doc.save() 
     messages.success(request, 'Dosya Yuklendi') 

    return HttpResponseRedirect('/uploadnew/') 

return render(request, 'upload.html', {'form': form}) 


def upload_file(request): 
    user= request.user 
    form = UploadFileForm(request.POST, request.FILES) 
    if form.is_valid(): 
     doc = form.save(commit=False) 
     doc.user = request.user 
     doc.save() 
     messages.success(request, 'Dosya Yuklendi') 

     return HttpResponseRedirect('/uploadnew/') 

return render(request, 'upload.html', {'form': form}) 
+0

Wo tritt der Fehler auf? Können Sie Ihre ursprüngliche Frage mit Traceback bearbeiten? Haben Sie bei der Änderung Ihres Modells auch eine Migration erstellt? –

+0

Das hat nichts mit Ihrer Sicht zu tun. Bitte lösche es aus der Frage und erkläre, welche Änderungen du an deinem Modell vorgenommen hast – e4c5

+0

@ShangWang Ich habe Ereignisse in Modellen hinzugefügt, dann mache ich Makemigrationen, wenn ich migriere, tritt das Problem auf. –

Antwort

0

Okay, ich Ihr Problem.

In models.py, Sie definieren die null = True Option für die Ereignis Säule, die von der Art ist, models.CharField.

event = models.CharField(max_length=15, choices=events, null = True) 

Aber als der Tat bedeutet 'CharField' nicht haben die null Option darin. Nur die Option 'max_length' ist verfügbar.

Siehe this ->https://docs.djangoproject.com/en/1.9/ref/models/fields/

So technisch, müssen Sie entfernen dass null = True Teil und wenn Sie wirklich wollen den Benutzer Ihrer Web-App zu ermöglichen, die Freiheit zu haben, Wenn Sie keine Option auswählen, können Sie einen Standardwert Wert zu Ihrer Spalte hinzufügen, die einen Standardwert aus den von Ihnen in der Spalte events definierten Optionen auswählt.

Siehe das Beispiel in der offiziellen Dokumentation. Es ist das gleiche wie das, was Sie wollen ->https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.Field.choices

So Sie Ereignisspalte wird schließlich wie folgt aussehen, wenn Ihr Standardwert ist Barbeque:

event = models.CharField(max_length=15, choices=events, default=bbq) 

Wie auch in den offiziellen Dokumente gezeigt, ich don Denken Sie, Sie brauchen die einfachen Anführungszeichen rund um 'bbq' oder 'meet'.

Ich hoffe, dass dies Ihr Problem lösen wird.

+0

Vielen Dank !! –

+0

Glücklich zu helfen. :) –