1对1关系
创建表
class Users(models.Model):
u_name = models.CharField(max_length=20)
u_age = models.IntegerField(default=18)
从表中有一个字段与主表产生联系 f_user(字段名) = models.OneToOneField(Users)
class foods(models.Model):
f_name = models.CharField(max_length=20)
f_price = models.IntegerField(default=10)
f_user = models.OneToOneField(Users)
插入数据
主表:正常插入数据
def addusers(request):
user=Users()
user.u_name="小猫咪"
user.u_age=19
user.save()
return HttpResponse("adduser success")
从表:找出主表中对应的id赋给一个对象,然后将这个对象赋给产生关系的字段
def addfood(request):
fo=foods()
user=Users.objects.filter(pk=1).first()
fo.f_name="小鱼干"
fo.f_price=10
fo.f_user=user
fo.save()
return HttpResponse("addfood success")
修改数据
def updateusers(request):
user=Users.objects.filter(pk=1).first()
user.u_name="小狗狗"
user.save()
return HttpResponse("uodate success!")
删除数据
注意:
1. 如果删除的是主表中的数据, 如果在从表中没有对应的数据,会直接删除该数据
, 如果在从表中存在对应的数据,会连同从表中的数据一同删除
2.如果删除的是从表中的数据,会直接删除该数据,主表中的数据不会受影响
def deluser(request):
user=Users.objects.filter(pk=3).first()
user.delete()
return HttpResponse("deluser success!")
查询数据
自己表查自己表
def findusers(request):
user=Users.objects.filter(pk=4).first()
return HttpResponse(user.u_name)
从从表中查主表
先获得从表的数据,然后取得这个对象。
找到这个对象的与主表产生联系的字段,将其赋给一个对象
查询这个对象的字段即可
def findusersfromfood(request):
food=foods.objects.filter(pk=2).first()
print(food) #object
user=food.f_user #f_user与主表从产生联系
return HttpResponse(user.u_name)
从主表查从表
先查出主表的信息,赋给一个对象,
从表从主表拿信息的过程是通过 主表信息对象.从表名的全小写,在这里是foods,foods是一个隐式属性
def findfoodfromuser(request):
user=Users.objects.filter(pk=4).first()
# user=Users()
food=user.foods
return HttpResponse(food.f_name)
不管谁查谁,都要先获取知道的那个表的信息,然后通过独自的方法产生联系