django关联关系

12 篇文章 0 订阅

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)

不管谁查谁,都要先获取知道的那个表的信息,然后通过独自的方法产生联系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值