python 外键用法 多对多关系 ORM操作 模板相关

一.app/models中写类(设计表结构)

1.普通类

class  A(models.Model):

  id=modles.AutoField(primary_key=True)

  name=models.CharField(max_length=32,unique=True)

2.设置外键

class B(models.Model): 

  id = models.AutoField(primary_key=True)
  title = models.CharField(max_length=32, unique=True)

  a=models.ForeignKey(to=A,on_delete=models.CASCADE)    B必须写在A后面

  a=models.ForeignKey(to='A',on_delete=models.CASCADE)    加引号可以不按顺序写

  def __repr__(self):

      return "<B object: {}>".format(self.name)

3.设计多对多关系表

class C(models.Model):

  name=models.CharField(max_length=32,unique=True)

  bs=models.ManyToManyField('B')

  def __repr__(self)

    return "<C object:  {}>".format(self.name)

  __str__=__repr__

二.ORM操作

1.查

  models.A.objects.get(id=1,name='xx')   # 获取一个对象   —— 》一个对象  没有或多个会报错

  models.A.objects.all()      #获取所有对象  —— 》queryset 对象列表

  models.A.objects.all().order_by('-id')      #获取所有对象  —— 》queryset 对象列表  并排序

  models.A.object.filter(id=1,name='xx') 获取满足条件的所有对象  —— 》queryset 对

  相关属性

    普通类:对象.id

        对象.name

    外键:

      对象.id

      对象.name

      对象.a----->相关联的a对象

      对象.a_id  --->相关联的a对象的id

    多对多:

      对象.id

      对象.name

      对象.bs   ------>获得管理对象

      对象.bs.all---->  获取全部内容

    

2.增

  普通:

     new-obj=models.A.objects.create(name='新的出版社名字')

  外键:  

    b_obj=models.B.objects.create(title='新的书名',a=a_obj)
    b_obj=models.B.objects.create(title='新的书名',a_id=a_obj.id)

  多对多: 

    c_obj = models.C.objects.create(name='作者名字')
    c_obj.bs.set([1,3,5])

3.删

  删除一条

  models.A.objects.get(id=1,name='xx').delete()

  删除全部

  models.A.objects.all().delete()

4.改

  普通:

  a_obj.name="新名字"

  a_obj.save()

  外键;

  b_obj.name="新名字"

  b_obj.a=a_obj

  b_obj.a_id=a_obj.id

  b_obj.save()

  多对多

  c_obj.name='新名字'

  c_obj.save()

  c_obj.bs.set([1,2,3])

三.模板相关

render(request,'模板名字',{'new_name':'新华出版社','err_meg':'出版社已存在'})

{{ 变量名 }} {{ new_name}} 新华出版社

标签(与逻辑相关)
{% for a in a_list %}
  {{ forloop.counter }}
  {{ a.id }}
  {{a.name }}
{% endfor%}

转载于:https://www.cnblogs.com/J-7-H-2-F-7/p/9621586.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在数据库设计中,多对多关系通常需要使用关联表来表示。关联表包含两个外键,分别指向相关实体的主键。以下是一个简单的例子,假设我们有两个实体:学生和课程,每个学生可以选择多个课程,每个课程可以被多个学生选择。 我们可以创建一个名为“student_course”的关联表来表示这种多对多关系。该表应该至少包含以下两个列: - student_id: 指向学生实体的主键 - course_id: 指向课程实体的主键 这两列组成了关联表的复合主键,以确保每个学生和每个课程只能在关联表中出现一次。同时,这两列也是关联表与学生表和课程表之间的外键关系。在创建关联表时,你需要确保它们的数据类型和长度与相应的主键列匹配。例如,如果学生表的主键类型为整数,则student_id列的类型也应该为整数。 在向关联表中添加数据时,你需要同时插入student_id和course_id的值。这些值应该与学生表和课程表中的相应主键对应。例如,如果学生表中一个名为“John”的学生的主键值为1,而课程表中一个名为“Math”的课程的主键值为2,则在关联表中插入(1,2)将表示John选择了Math课程。 总之,在设计多对多关系的数据库模型时,关联表是一个重要的概念。通过关联表,你可以轻松地管理实体之间的多对多关系,并通过外键来确保数据完整性和一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值