【发布时间】:2016-01-02 17:06:06
【问题描述】:
我不确定为什么会发生此错误。它发生在我限制一个用户只创建一个类别之后。但我希望能够在管理页面中创建多个类别页面。我曾尝试通过管理页面创建类别页面,但它给了我错误:
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
完整性错误
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']
【问题讨论】:
-
这是 SQLite3 吗?我正在查看您的异常位置中的文件路径。
-
是的,它是从那里发生的吗?我仍然在我的本地,我愿意删除并重新安装 db
-
您的视图完全无关紧要,因为此错误发生在管理员中。它的逻辑是正确的,因为如果它在那里发生,它将解决这个问题,但事实并非如此:您的错误清楚地表明它正在管理添加类别页面中发生。您需要某种方式来使用该逻辑。
-
根据您的错误,您尝试保存
main_category而不指定author_id。查看您的视图,可能request.user在分配给作者时未设置。如果作者是必填字段,则应在您的管理员中进行检查。 -
而错误的原因是你只在你的管理类中包含了 name 和 slug 字段的 Category ,所以 author 将永远是 None ,你在定义中禁止了作者字段。