で保存されません。ジャンゴ - の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)