zoukankan      html  css  js  c++  java
  • django—model

         publish=models.ForeignKey(to="Publish",to_field="nid")

        书与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表
         authors=models.ManyToManyField(to='Author')  

    (1)null 如果为True,Django 将用NULL 来在数据库中存储空值。 默认值是 False.

    (2)blank 如果为True,该字段允许不填。默认为False。 要注意,这与 null 不同。null纯粹是数据库范畴的,而 blank 是数据验证范畴的。 如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字段的blank=False,该字段就是必填的.

    (3)default 字段的默认值。可以是一个值或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用。

    (4)primary_key 如果为True,那么这个字段就是模型的主键。如果你没有指定任何一个字段的primary_key=True, Django 就会自动添加一个IntegerField字段做为主键,所以除非你想覆盖默认的主键行为, 否则没必要设置任何一个字段的primary_key=True。

    (5)unique 如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的

    添加表记录

    普通字段

    方式1
    publish_obj=Publish(name="人民出版社",city="北京",email="renMin@163.com")
    publish_obj.save() 将数据保存到数据库
    方式2
    publish_obj=Publish.objects.create(name="人民出版社",city="北京",email="renMin@163.com")

    外键字段

    方式1:
       publish_obj=Publish.objects.get(nid=1)
       Book.objects.create(title="金瓶眉",publishDate="2012-12-12",price=665,pageNum=334,publish=publish_obj)
    方式2:
       Book.objects.create(title="金瓶眉",publishDate="2012-12-12",price=665,pageNum=334,publish_id=1)

    多对多字段

    book_obj=Book.objects.create(title="追风筝的人",publishDate="2012-11-12",price=69,pageNum=314,publish_id=1)
     
    author_yuan=Author.objects.create(name="yuan",age=23,authorDetail_id=1)
    author_egon=Author.objects.create(name="egon",age=32,authorDetail_id=2)
     
    book_obj.authors.add(author_egon,author_yuan)    #  将某个特定的 model 对象添加到被关联对象集合中。  
     
    book_obj.authors.create()      #创建并保存一个新对象,然后将这个对象加被关联对象的
    book_obj.authors.remove()     # 将某个特定的对象从被关联对象集合中去除。   
    book_obj.authors.clear()       #清空被关联对象集合。
    关联管理器
    add(obj1[, obj2, ...])
    把指定的模型对象添加到关联对象集中。
    
    例如:
    
    >>> b = Blog.objects.get(id=1)
    >>> e = Entry.objects.get(id=234)
    >>> b.entry_set.add(e) # Associates Entry e with Blog b.
    在上面的例子中,对于ForeignKey关系,e.save()由关联管理器调用,执行更新操作。然而,在多对多关系中使用add()并不会调用任何 save()方法,而是由QuerySet.bulk_create()创建关系。
    
    延伸:
    
    # 1 *[]的使用
    >>> book_obj = Book.objects.get(id=1)
    >>> author_list = Author.objects.filter(id__gt=2)
    >>> book_obj.authors.add(*author_list)
    
    
    # 2 直接绑定主键
    book_obj.authors.add(*[1,3])  # 将id=1和id=3的作者对象添加到这本书的作者集合中
                                  # 应用: 添加或者编辑时,提交作者信息时可以用到.  

     remove(obj1[, obj2, ...])

    从关联对象集中移除执行的模型对象:
    
    >>> b = Blog.objects.get(id=1)
    >>> e = Entry.objects.get(id=234)
    >>> b.entry_set.remove(e) # Disassociates Entry e from Blog b.

    clear()

    从关联对象集中移除一切对象。 >>> b = Blog.objects.get(id=1) >>> b.entry_set.clear() 注意这样不会删除对象 —— 只会删除他们之间的关联。 就像 remove() 方法一样,clear()只能在 null=True的ForeignKey上被调用。

    修改表记录

    1.author=Author.objects.get(id=5)  

    author.name=''韩晓飞"

    author.save()

    2.Publisher.objects.filter(id=2).update(name='xinghua')

    注意:

    <1> 第二种方式修改不能用get的原因是:update是QuerySet对象的方法,get返回的是一个model对象,它没有update方法,而filter返回的是一个QuerySet对象(filter里面的条件可能有多个条件符合,比如name='alvin',可能有两个name='alvin'的行数据)。

    删除表记录

    e.delete()

    每个 QuerySet 都有一个 delete() 方法,它一次性删除 QuerySet 中所有的对象。

    要注意的是: delete() 方法是 QuerySet 上的方法,但并不适用于 Manager 本身。这是一种保护机制,是为了避免意外地调用 Entry.objects.delete() 方法导致 所有的 记录被误删除。如果你确认要删除所有的对象,那么你必须显式地调用:

    Entry.objects.all().delete() 

    pubHouse = models.ForeignKey(to='Publisher', on_delete=models.SET_NULL, blank=True, null=True)

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Hadoop 集群安装(从节点安装配置)
    Hadoop 集群安装(主节点安装)
    少儿编程(2):简单的数学计算
    少儿编程(1):计算思维
    Web测试入门:Selenium+Chrome+Python+Mac OS
    我为什么建议:在软工实践作业中增加性能测试分析的任务?
    基于码云开展程序设计教学的自动判分方法和代码框架?
    数值计算 的bug:(理论)数学上等价,实际运行未必等价
    【Alpha】Daily Scrum Meeting总结
    【Alpha】Daily Scrum Meeting第十次
  • 原文地址:https://www.cnblogs.com/hanxiaofeicf/p/7840828.html
Copyright © 2011-2022 走看看