视图函数中创建模型, 并设置外键

简介: 视图函数中创建模型, 并设置外键。

视图函数中创建模型, 并设置外键
方法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的解决方案。
相关文章
|
8天前
|
安全 容器
switfUI 组合视图
switfUI 组合视图
45 1
|
5月前
关联表更新封装
关联表更新封装
29 2
|
11月前
|
数据库
因祸得福——创建视图时改变字段的类型
因祸得福——创建视图时改变字段的类型
109 0
|
数据可视化 开发者
使用VFL创建约束对象
使用VFL创建约束对象
83 0
|
SQL 数据处理
视图的创建
如何创建和使用视图的功能,更好的方便我们的工作。
80 0
|
索引
啥,又要为表增加一列属性?
今天分享2个列扩展性设计上几个小技巧,只占大伙1分钟(下班太晚的话,只能写一分钟系列=_=)
460 0