zoukankan      html  css  js  c++  java
  • 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>]>

      总结:

  • 相关阅读:
    HDU1029 Ignatius and the Princess IV
    UVA11039 Building designing【排序】
    UVA11039 Building designing【排序】
    POJ3278 HDU2717 Catch That Cow
    POJ3278 HDU2717 Catch That Cow
    POJ1338 Ugly Numbers(解法二)
    POJ1338 Ugly Numbers(解法二)
    UVA532 Dungeon Master
    UVA532 Dungeon Master
    POJ1915 Knight Moves
  • 原文地址:https://www.cnblogs.com/homle/p/8614036.html
Copyright © 2011-2022 走看看