您好,欢迎来到这里学习Django框架,关注我会持续更新内容哦~
如果本文对您有帮助,还请您点赞转发哦,谢谢!
一对一关系
使用OneToOneField,例如用户表和用户信息表
class Info(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
age = models.IntegerField()
class Sex(models.IntegerChoices):
男 = 1
女 = 2
sex = models.IntegerField(choices=Sex.choices)
新增数据
# 方式1
user_obj = User.objects.create(first_name = '小', last_name = '华')
Info.objects.create(user = user_obj, age = 20, sex = 2)
# 方式2
user_obj = User.objects.create(first_name = '小', last_name = '华')
info_dic = {'age':20, 'sex':2}
Info.objects.create(user = user_obj,**info_dic)
# 方式3
user_obj = User.objects.create(first_name = '小', last_name = '华')
info_obj = Info(user = user_obj, age = 20, sex = 2)
info_obj.save()
修改数据
# 方式1
>>> Info.objects.filter(user__last_name = '华').update(sex = 1)
(0.007) UPDATE "myapp_info" SET "sex" = 1 WHERE "myapp_info"."id" IN (SELECT U0."id" FROM "myapp_info" U0 INNER JOIN "myapp_user" U1 ON (U0."user_id" = U1."id") WHERE U1."last_name" = '华'); args=(1, '华')
# 方式2
>>> Info.objects.filter(user__last_name = '华')
>>> info_dic = {'sex': 2}
>>> Info.objects.filter(user__last_name = '华').update(**info_dic)
(0.006) UPDATE "myapp_info" SET "sex" = 2 WHERE "myapp_info"."id" IN (SELECT U0."id" FROM "myapp_info" U0 INNER JOIN "myapp_user" U1 ON (U0."user_id" = U1."id") WHERE U1."last_name" = '华'); args=(2, '华')
删除数据
>>> User.objects.get(id=3).delete()
(0.002) SELECT "myapp_user"."id", "myapp_user"."first_name", "myapp_user"."last_name" FROM "myapp_user" WHERE "myapp_user"."id" = 3 LIMIT 21; args=(3,)
(0.000) BEGIN; args=None
(0.003) DELETE FROM "myapp_info" WHERE "myapp_info"."user_id" IN (3); args=(3,)
(0.000) DELETE FROM "myapp_article" WHERE "myapp_article"."user_id" IN (3); args=(3,)
(0.000) DELETE FROM "myapp_user" WHERE "myapp_user"."id" IN (3); args=(3,)
(2, {'myapp.Info': 1, 'myapp.User': 1})
>>> Info.objects.get(id=1).delete()
(0.001) SELECT "myapp_info"."id", "myapp_info"."user_id", "myapp_info"."age", "myapp_info"."sex" FROM "myapp_info" WHERE "myapp_info"."id" = 1 LIMIT 21; args=(1,)
(0.003) DELETE FROM "myapp_info" WHERE "myapp_info"."id" IN (1); args=(1,)
(1, {'myapp.Info': 1})
查询数据
>>> user_obj = User.objects.filter(first_name='张').values('info__age', 'info__sex')
>>> print(user_obj)
(0.003) SELECT "myapp_info"."age", "myapp_info"."sex" FROM "myapp_user" LEFT OUTER JOIN "myapp_info" ON ("myapp_user"."id" = "myapp_info"."user_id") WHERE "myapp_user"."first_name" = '张' LIMIT 21; args=('张',)
<QuerySet [{'info__age': 19, 'info__sex': 2}]>