2017-02-10 4 views
0

で保存されません。ジャンゴ - のModelFormは私が手が見つからないため、ユーザーID

私の見解では、ここで
IntegrityError at /category/ 
NOT NULL constraint failed: transactions_category.user_id 

elif "create" in request.POST: 
     createform = CategoryForm(data=request.POST) 
     createform.save(commit=False) 
     createform.user = request.user 
     createform.save() <--- specifically here, the .save with commit=False goes through and I can also set the user 

私は、デバッガでチェックし、createform.userは、ユーザーが持っている、ということユーザーにもIDがあります。

forms.py:

class CategoryForm(ModelForm): 
    class Meta: 
     model = Category 
     exclude = ["subcategory", "user"] 

models.py:

class Category(models.Model): 
    title = models.CharField(max_length = 100) 
    subcategory = models.ManyToManyField("self", blank=True, symmetrical=False) 
    user = models.ForeignKey(User) 

ユーザーのインポートは、次のとおりです。

from django.contrib.auth.models import User 

なぜそれが保存されませんか?私は.save()を呼び出す前にユーザを設定していますが、ユーザはデバッガで知る限り設定されています(そしてIDを持っています)?

私はmanage.py migrateとmanage.pyの両方のマカマイグレーションを実行していますが、すべてが最新です。

編集:

テンプレート:私はモデルに「ユーザー」フィールドを追加する前に

<p>Create new category form</p> 
<form action="/category/" method="post"> 
    {% csrf_token %} 
    {{ createform.as_p }} 
    <input type="submit" name="create" value="Create new category"> 
</form> 
<hr> 

新しいカテゴリーのオブジェクトの作成と保存が働いていた(と私がした後、私は移行しmakemigrations走りました)

編集2: 完全なビュー:

def category_view(request): 
    createform = CategoryForm() 
    searchform = CategorySearchForm() 
    categories = Category.objects.all() 
    categories_left = [] 
    categories_right = [] 

    if request.method == "POST": 
     if "search" in request.POST: 
      categories_left = Category.objects.for_title(request.POST["left-search"], user=request.user) 
      categories_right = Category.objects.for_title(request.POST["right-search"], user=request.user) 
     elif "create" in request.POST: 
      createform = CategoryForm(request.POST) 
      if createform.is_valid(): 
       createform.save(commit=False) 
       createform.user = request.user 
       createform.save() 
     elif "add-subcategory" in request.POST: 
      left = Category.objects.for_id(request.POST["left-category"], user=request.user) 
      right = Category.objects.for_id(request.POST["right-category"], user=request.user) 
      try: 
       left.subcategory.add(right) 
       old = left 
       old.pk = None 
       old.save() 
      except IntegrityError: 
       print("This combination already exists.") # TODO 
    context = {"createform":createform, 
       "searchform":searchform, 
       "categories":categories, 
       "categories_left":categories_left, 
       "categories_right":categories_right} 
    return render(request, "transactions/category_creation.html", context) 

答えて

1

ユーザーのインスタンスを渡すことを保存しようとします。

createform.save(commit=False) 
createform.instance.user = request.user 
createform.save() 
1

フォームのsaveメソッドはインスタンスを返します。フォームを再度保存するのではなく、インスタンスを更新して保存する必要があります。

instance = createform.save(commit=False) 
instance.user = request.user 
instance.save() 
関連する問題