2017-10-22 15 views
0

を、私はこの問題を持っている:::ジャンゴNOT NULL制約が失敗しました:BekanSite_project.owner_id

IntegrityErrorを/ addproject/ でNOT NULL制約が失敗しました:BekanSite_project.owner_idを。私はこの問題をどのように修正できるのか分かりません。

これは私のモデルです::

from django.db import models 
from django import forms 
from django.contrib.auth.models import User 
from django.core.validators import URLValidator 

class Project(models.Model): 
    project_name = models.CharField(verbose_name='Имя 
     проекта',max_length=200, default='') 
    project_cost = models.IntegerField(verbose_name='Сумма 
     инвестиции',default='') 
    investor = models.IntegerField(verbose_name='Долья 
     инвестерa',default='') 
    email = models.EmailField(verbose_name='Почта',max_length=50, 
     default='')..other fields 

    owner = models.ForeignKey(User) 

    def __str__(self): 
     return self.owner 

views.py

@login_required 
def addproject(request): 
    if request.POST: 
     form = ProjectForm(request.POST, request.FILES) 
     if form.is_valid(): 
      form.owner = request.user 
      addproject = form.save()"<<<<where it fails" 
      addproject.save() 
      return HttpResponseRedirect(reverse('accounts:profile')) 
    else: 
     form = ProjectForm() 
    return render(request, 'BekanSite/addproject.html', 
     {'form':form,'username':auth.get_user(request).username}) 

forms.py

from django.db import models 
from django import forms 
from .models import Project 
from django.contrib.auth.forms import UserCreationForm 
from django.contrib.auth.models import User 
from PIL import Image 
class ProjectForm(forms.ModelForm): 
    class Meta: 
     model = Project 
     fields = ['project_name','project_cost',...(other fields),] 

私はそれが何らかの形でのForeignKeyに関連していると思います。助けてください。事前に感謝します。

答えて

0

あなたは、フォームが有効であることをチェックする前に、ユーザーを添付することがあります:(form.save以降)

if request.POST: 
    form = ProjectForm(request.POST, request.FILES) 
    form.owner = request.user 
    if form.is_valid(): 
     addproject = form.save()"<<<<where it fails" 
     addproject.save() 
     return HttpResponseRedirect(reverse('accounts:profile')) 

そして、あなたは(addproject.saveを呼び出すために持っていけない)は、そのもうありません。

+0

正しいですか? – rajkris

+0

自分のコード::: ' @login_required DEF addproject(リクエスト): 場合request.POST: フォーム= ProjectForm(request.POST、request.FILES) form.owner =からrequest.user form.is_valid場合( ): addproject = form.save() リターンHttpResponseRedirect(逆( 'アカウント:プロファイル'))他 : フォーム= ProjectForm() リターンレンダリング(要求、 'BekanSite/addproject.html' { '形態' :form、 'username':auth.get_user(request).username}) '残念ながら、それは動作しません。この問題を解決する他の方法を教えてください。 – bekzod

+0

同じエラーが表示されますか? – rajkris

0

私はそれを解決しました。私はそれがどのように動作するのかわかりませんが、私はちょうどコミット=偽addproject = form.save(commit=False)を追加しました。私は "python-crash-course-a-hands-on-eric-matthes"という本で見つけました。今それは動作します。また、この問題を解決するあなたの努力のためにRajKrisに感謝します。

関連する問題