django 多表操作

在关系表中添加数据和删除数据的两种方式

在models.py中创建两个表,其中在UserGroup表中通过user字段和User表建立多对多关系。

class User(models.Model):
        username = models.CharField(max_length=50)
        password = models.CharField(max_length=50)
        email = models.EmailField()
        def __str__(self):
                return 'u %s %s' % (self.username,self.password)
class UserGroup(models.Model):
        GroupName = models.CharField(max_length=50)
        user = models.ManyToManyField('User')
        def __str__(self):
                return 'u %s' % self.GroupName

1. 在视图函数中,对关系表添加数据的两种方式

  方式一:

from user import models

def index(request):
    u1 = models.User.objects.get(id=5)
    g1 = models.UserGroup.objects.get(id=1)
    g1.user.add(u1)
    g2 = models.UserGroup.objects.get(id=2)
    g2.user.add(u1)
    return HttpResponse('successful')

在数据库中查看添加两条记录

方式二:通过ManyToMany字段所在关系表的小写+_set

from user import models

def index(request):
    g2 = models.UserGroup.objects.get(id=2)
    u2 = models.User.objects.get(id=6)
    u2.usergroup_set.add(g2)
    return HttpResponse('successful')

查看生成记录

2. 在视图函数中对关系表删除数据的两种方式

方式一:

from user import models

def index(request):
    u1 = models.User.objects.get(id=3)
    g1 = models.UserGroup.objects.get(id=1)
    g1.user.remove(u1)
    return HttpResponse('successful')

查看生成记录,可以看到usergroup_id 3,user_id 1已经被删除

方式二

from user import models

def index(request):
    u2 = models.User.objects.get(id=2)
    g2 = models.UserGroup.objects.get(id=2)
    u2.usergroup_set.remove(g2)
    return HttpResponse('successful')

查看生成记录,可以看到user_id 2和usergroup_id 2已经被删除

g2 = models.UserGroup.objects.get(id=2)

print(g2.user.all())
print(g2.user.all().filter(id=1))

  分别获取到关系表中usergroup_id 为2,所对应的user表中的数据和user表中id为1的数据

  <QuerySet [<User: u hq 123>, <User: u he 456>, <User: u ht 567>, <User: u hu 478>]>
  <QuerySet [<User: u hq 123>]>

  总结:

原文地址:https://www.cnblogs.com/homle/p/8614036.html