Bootstrap

django数据库的多对多增删改查

这里以一个实例来说明:

多对多关系表的建立

首先可以先建立一个model:

这里有两个类:角色People与绰号Nickname。一个人可以有多个绰号,同理,一个绰号有可能被多个人共用。因此他们是多对多的关系。

这里我们在Nickname中声明ManyToManyField。(改成People中声明也可以)

class People(models.Model):
    name = models.CharField(max_length=50)
    age = models.IntegerField()

class Nickname(models.Model):
    title = models.CharField(max_length=50)
    people = models.ManyToManyField(People)

这样便会生成三个表:角色表,绰号表,角色_绰号关联表。

数据的查询

这里通过model有无ManyToManyField的两种情况分别进行查询,(修改与添加等类似):

People表:

用于model中没有ManyToManyField,因此需要类似反向查询的:表名(小写的)_set 的方法进行关联。

class PeopleView(View):
    def get(self,request):
        temp = People.objects.all()
        aimlist = []
        for i in temp:
            aimlist.append({
                "name":i.name,
                "age": i.age,
                "nickname":list(i.nickname_set.all().values())
            })
        return JsonResponse({"aimlist":aimlist})

Nickname表:

用于model中存在ManyToManyField:

class NicknameView(View):
    def get(self,request):
        temp = Nickname.objects.all()
        aimlist = []
        for i in temp:
            aimlist.append({
                "title":i.title,
                "nickname":list(i.people.all().values())
            })
        return JsonResponse({"aimlist":aimlist})

数据的添加

多对多的属性通常为列表形式的数据,里面存放的是id,如 [1,2,3],

可以通过对其进行循环遍历的方法逐一通过add()方法进行添加。

def post(self,request):
    data = json.loads(request.body)
    newpeople = People.objects.create(name=data['name'],age=data['age'])
    for i in data['nickname']:		#传递的是存放id的数组,如[1,2,3]
        newpeople.nickname_set.add(i)
        #newpeople.people.add(i)    
    return JsonResponse({"code": 200})

数据的修改

先通过id找到要修改的数据,对其其他属性进行修改;

然后再将关联表中与本次修改的数据关联的所有字段删除,再逐一遍历添加即可。

def put(self,request):
    data = json.loads(request.body)
    aimpeople = People.objects.get(id=data["id"])
    aimpeople.name = data['name']
    aimpeople.age = data['age']
    aimpeople.nickname_set.clear()		#先清空关联表中的相关数据,再遍历列表重新添加。
    for i in data['nickname']:
        aimpeople.nickname_set.add(i)
        aimpeople.save()
    return JsonResponse({"code": 200})

数据的删除

这个很简单,正常删就好,关联表会自动变化。

def delete(self,request):
    aimid = request.GET.get("id")
    aimpeople = People.objects.get(id=aimid)
    aimpeople.delete()
    return JsonResponse({"code": 200})

以上就是django中多对多表相关操作的全部内容了,希望对你有所帮助^_^

;