2016-05-31 9 views
4

私はstackoverflow、Python、Djangoの新機能ですが、(NOT NULL制約に失敗しました:sixerrapp_gig.user_id)というエラーが表示されます。フォーム。Django Help:CreateViewでNOT NULL制約を解決できませんでした。

私はこれまでStackOverflowで見つかったものからuser_idの値を割り当てていないのですが、django CreateViewを使用してそれを行う方法がわかりません。

プロジェクトの練習はfiverr.comのクローンに基づいています。 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 %} 

Iユーザーフィールドが必要ですフォームがサブミットされると自動的に値が返されます。それを行うために私のコードには何が欠けているのか分かりません。

ありがとうございました!

答えて

4

これを処理する必要があるのは、form_valid()ビューです。

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) 

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

+0

ではより多くの参照ねえローハンは、魔法のように働きました。本当にありがとう、ありがとう! –

関連する問題