视图函数中创建模型, 并设置外键
方法1: 给Article对象指定author,就可以使用以下代码来完成:
def index(request):
p = Person(name='小花')
# 将p先保存到数据库中
p.save()
a = Article(title='日记1', content='二狗打小报告, 真讨厌' )
a.author = p
a.save()
return HttpResponse('')
并且以后如果想要获取某个用户下所有的文章,可以通过article_set来实现。示例代码如下:
def index(request):
# 获取person表中的第一个用户
p = Person.objects.first()
# 获取该用户的所有文章
s = p.article_set.all()
for x in s:
print(x)
return HttpResponse('')
方法2:
def index(request):
a = Article(title='日记3', content='哇,三胖瘦了更好看!')
p = Person.objects.first()
p.article_set.add(a, bulk=False)
return HttpResponse('')
- 使用bulk=False,那么Django会自动的保存article,而不需要在添加到p之前先保存article。
- 或者是另外一种解决方式是,在添加到category.article_set中之前,先将article保存到数据库中。但是如果article.category不能为空,那么就产生一种死循环了,article没有category不能保存,而将article添加到cateogry.artile_set中,又需要article之前是已经存储到数据库中的。
如下:# ----- 此代码不成立 ----- def index(request): a = Article(title='日记3', content='哇,三胖瘦了更好看!') a.save() p = Person.objects.first() p.article_set.add(a) return HttpResponse('') # django.db.utils.IntegrityError: NOT NULL constraint failed: firsta_article.author_id
- 如果是上面的那种需求,建议使用bulk=False的解决方案。