2016-05-31 6 views
4

Ich bin neu zu stackoverflow, Python und Django, habe eine Frage über die '(NOT NULL Constraint fehlgeschlagen: sixerrapp_gig.user_id)' Fehler bekomme ich, wenn ich auf Senden klicken die Form.Django Hilfe: Beheben von NOT NULL Constraint fehlgeschlagen Fehler mit CreateView

Ziemlich sicher ist es, weil ich keinen user_id Wert von dem, was ich bisher auf StackOverflow gefunden habe, zugewiesen habe, aber ich bin nicht sicher, wie man es mit dem django CreateView macht.

Die Projektübung basiert auf einem Klon von fiverr.com.

Bitte siehe Code unten:

in models.py:

from django.db import models 
from django.contrib.auth.models import User 
from django.utils import timezone 
from django.core.urlresolvers import reverse #for model forms 

class Profile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    avatar = models.CharField(max_length=500) 
    about = models.CharField(max_length=1000) 

    def __str__(self): 
     return self.user.username 

class Gig(models.Model): 
    CATEGORY_CHOICES = (
     ("GD", "Graphics & Design"), 
     ("DM", "Digital & Marketing"), 
     ("VA", "Video & Animation"), 
     ("MA", "Music & Audio"), 
     ("PT", "Programming & Tech") 
    ) 
    title = models.CharField(max_length=500) 
    category = models.CharField(max_length = 2, choices=CATEGORY_CHOICES) 
    description = models.CharField(max_length=1000) 
    price = models.IntegerField(default=6) 
    photo = models.FileField(upload_to='gigs') 
    status = models.BooleanField(default=True) 
    user = models.ForeignKey(User) 
    create_time = models.DateTimeField(default=timezone.now) 

    def get_absolute_url(self): 
     return reverse('my_gigs') 

    def __str__(self): 
     return self.title 

views.py:

from django.shortcuts import render, redirect 
from django.contrib.auth.decorators import login_required 
from django.views import generic 
from django.views.generic.edit import CreateView, UpdateView, DeleteView 
from .models import Gig 
from .forms import GigForm 

class CreateGig(CreateView): 
    model = Gig  
    fields = ['title','category','description','price','photo','status'] 

gig_form.html

{% extends 'base.html' %} 
{% load staticfiles %} 

{% block page %} 

<form action="" method="post" enctype="multipart/form-data"> 
{% csrf_token %} 
{% include 'sixerrapp/form-template.html' %} 
<button type="submit" class="btn btn-primary">Submit</button> 
</form> 

{% endblock %} 

Was ich ich denke, Notwendigkeit ist für das Benutzerfeld zu bekommen ein Wert automatisch, wenn das Formular gesendet wird. Nicht sicher, was mir in meinem Code fehlt, um das zu tun.

Vielen Dank im Voraus für die Hilfe!

Antwort

4

Sie müssen das in form_valid() Methode der Ansicht behandeln.

class CreateGig(CreateView): 
    model = Gig  
    fields = ['title','category','description','price','photo','status'] 

    def form_valid(self, form): 
     form.instance.user = self.request.user 
     return super(CreateGig, self).form_valid(form) 

Weitere Referenz bei https://docs.djangoproject.com/en/1.9/topics/class-based-views/generic-editing/#models-and-request-user

+0

Hey Rohan, arbeitete wie ein Charme. Vielen Dank, ich schätze es sehr! –