我不确定为什么会出现这种错误。在我仅限制一个类别后,由一个用户创建它。但我希望能够在管理页面内创建多个类别页面。我尝试通过管理页面创建类别页面,它给了我错误:
IntegrityError at /admin/main/category/add/
NOT NULL constraint failed: main_category.author_id
我甚至不确定它发生在哪里。
Exception Type: IntegrityError at /admin/main/category/add/
Exception Value: NOT NULL constraint failed: main_category.author_id
IntegrityError
Exception Value:
Exception Location: /Desktop/ebagu0.2/env/local/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py in execute, line 318
Python Executable: Desktop/ebagu0.2/env/bin/python
我的模特
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
slug = models.CharField(max_length=100, unique=True)
author = models.OneToOneField(settings.AUTH_USER_MODEL, unique=True)
def save(self, *args, **kwargs):
self.slug = uuslug(self.name,instance=self, max_length=100)
super(Category, self).save(*args, **kwargs)
我的观点
@login_required
def add_category(request):
if Category.objects.filter(author=request.user).exists():
return render(request,'main/category_already_exists.html')
if request.method == 'POST':
category = Category(author=request.user)
form = CategoryForm(request.POST, instance=category)
if form.is_valid():
form.save(commit=True)
return redirect('index')
else:
form = CategoryForm()
return render(request, 'main/add_category.html', {'form':form})
我的管理员
class CatAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug':('name',)}
fields = ['name', 'slug']
答案 0 :(得分:0)
Exception Value: NOT NULL constraint failed: main_category.author_id
您忘记通过管理员设置author
:
class CatAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug':('name',)}
fields = ['name', 'slug', 'author']
# ^^^^^^^^^^
根据您的需要,您可能希望将author
字段设为可选:
class Category(models.Model):
...
# remove unique=True, add null=True
author = models.OneToOneField(settings.AUTH_USER_MODEL, null=True)
# ^^^^^^^^^
...
顺便说一句,请注意,如果使用非空OneToOneField
,则指定unique=True
是多余的。