如何针对Django模型进行高效的数据操作和模型设计?

2026-05-28 12:571阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计798个文字,预计阅读时间需要4分钟。

如何针对Django模型进行高效的数据操作和模型设计?

一对多,使用 `models.ForeignKey()` 关联;一对一,使用 `models.OneToOneField()` 关联;多对多,使用 `models.ManyToManyField()` 关联。

1. 主键外键关联pythonclass Idc(models.Model): name=models.CharField(max_length=...)

2. 一对多(一个老师下面好多学生)pythonclass Teacher(models.Model): students=models.ManyToManyField('Student')

class Student(models.Model): name=models.CharField(max_length=...)

3. 多对多(作者与书籍)pythonclass Author(models.Model): authors=models.ManyToManyField('Book')

class Book(models.Model): title=models.CharField(max_length=...)

  • 一对多,models.ForeignKey()
  • 一对一,models.OneToOneField()
  • 多对多,authors = models.ManyToManyField()

1.主键外键关联

一.一对多 (一个老师下面好多学生)

class Idc(models.Model):
name = models.CharField(max_length=32)
age = models.TextField(max_length=64)
def __str__(self):
return self.name

class Teacher(models.Model):
name = models.CharField(max_length=20)
class Student(models.Model):
name = models.CharField(max_length=20)
##teacher删除的时候 此字段默认显示 blank 表示表单为空 null表示数据库为空
teacher = models.ForeignKey(Teacher,default='', null=True, blank=True, on_delete=models.SET_DEFAULT)
def __str__(self):
return self.name

正向查找

stu=models.Teacher.objects.get(name='wangwu').student_set.all()

反向查找:

stu=models.Student.objects.get(name='llll').teacher.name

二.一对一(一个学生一个编号)

三.一对一(文章标签 一个文章对应多个标签 每个标签又对应多个文章)


article=models.Article.objects.create(name='开盘信息')

tags=models.Tags.objects.create(name='股票')

tags.article.add(article)

正常查找和反向查找 和一对一一样





################列表推导式


from django.contrib.auth.models import Permission, User, Group

u1=User.objects.get(pk=1) ###获取用户

u1.user_permissions.all() ##查看用户权限

<QuerySet []>

perm=Permission.objects.get(codename='add_user') ##获取权限

u1.user_permissions.add(perm) ##给用户添加这个全新啊

u1.user_permissions.all() ##查看用户的权限

<QuerySet [<Permission: login | tags | Can add 标签>]>





class IdcView(TemplateView):
template_name = 'tm/idc.html' def post(self,request,*args,**kwargs):
data = QueryDict(request.body).dict()
data2 = request.POST.dict()
print(data2)

print(data)

return JsonResponse(data)


如何针对Django模型进行高效的数据操作和模型设计?


class IdcView(TemplateView):
template_name = 'tm/idc.html'
# def get_context_data(self,request,*args,**kwargs): # kwargs = super().get_context_data(**kwargs) # pk=kwargs.get('pk') # data = Idcc.objects.filter(id=pk) # qs = [i.to_dict_base for i in data] # return qs def get_context_data(self, **kwargs):
idcs = Idcc.objects.all()
return {'idcs':idcs}


def post(self,request,*args,**kwargs):
print(request.body)
#data = QueryDict(request.body).dict() data = request.POST.dict()
Idcc.objects.create(**data)
status={'status':'1'}
return JsonResponse(status)
def delete(self,request,*args,**kwargs):
pk=kwargs.get('pk')
print(pk)
Idcc.objects.get(id=pk).delete()
status={'status':'1'}
return JsonResponse(status)
def put(self,request,*args,**kwargs):
pk = kwargs.get('pk')
data = QueryDict(request.body).dict()
print(data)
Idcc.objects.filter(id=pk).update(**data)
status={'status':'1'}
return JsonResponse(status)

本文共计798个文字,预计阅读时间需要4分钟。

如何针对Django模型进行高效的数据操作和模型设计?

一对多,使用 `models.ForeignKey()` 关联;一对一,使用 `models.OneToOneField()` 关联;多对多,使用 `models.ManyToManyField()` 关联。

1. 主键外键关联pythonclass Idc(models.Model): name=models.CharField(max_length=...)

2. 一对多(一个老师下面好多学生)pythonclass Teacher(models.Model): students=models.ManyToManyField('Student')

class Student(models.Model): name=models.CharField(max_length=...)

3. 多对多(作者与书籍)pythonclass Author(models.Model): authors=models.ManyToManyField('Book')

class Book(models.Model): title=models.CharField(max_length=...)

  • 一对多,models.ForeignKey()
  • 一对一,models.OneToOneField()
  • 多对多,authors = models.ManyToManyField()

1.主键外键关联

一.一对多 (一个老师下面好多学生)

class Idc(models.Model):
name = models.CharField(max_length=32)
age = models.TextField(max_length=64)
def __str__(self):
return self.name

class Teacher(models.Model):
name = models.CharField(max_length=20)
class Student(models.Model):
name = models.CharField(max_length=20)
##teacher删除的时候 此字段默认显示 blank 表示表单为空 null表示数据库为空
teacher = models.ForeignKey(Teacher,default='', null=True, blank=True, on_delete=models.SET_DEFAULT)
def __str__(self):
return self.name

正向查找

stu=models.Teacher.objects.get(name='wangwu').student_set.all()

反向查找:

stu=models.Student.objects.get(name='llll').teacher.name

二.一对一(一个学生一个编号)

三.一对一(文章标签 一个文章对应多个标签 每个标签又对应多个文章)


article=models.Article.objects.create(name='开盘信息')

tags=models.Tags.objects.create(name='股票')

tags.article.add(article)

正常查找和反向查找 和一对一一样





################列表推导式


from django.contrib.auth.models import Permission, User, Group

u1=User.objects.get(pk=1) ###获取用户

u1.user_permissions.all() ##查看用户权限

<QuerySet []>

perm=Permission.objects.get(codename='add_user') ##获取权限

u1.user_permissions.add(perm) ##给用户添加这个全新啊

u1.user_permissions.all() ##查看用户的权限

<QuerySet [<Permission: login | tags | Can add 标签>]>





class IdcView(TemplateView):
template_name = 'tm/idc.html' def post(self,request,*args,**kwargs):
data = QueryDict(request.body).dict()
data2 = request.POST.dict()
print(data2)

print(data)

return JsonResponse(data)


如何针对Django模型进行高效的数据操作和模型设计?


class IdcView(TemplateView):
template_name = 'tm/idc.html'
# def get_context_data(self,request,*args,**kwargs): # kwargs = super().get_context_data(**kwargs) # pk=kwargs.get('pk') # data = Idcc.objects.filter(id=pk) # qs = [i.to_dict_base for i in data] # return qs def get_context_data(self, **kwargs):
idcs = Idcc.objects.all()
return {'idcs':idcs}


def post(self,request,*args,**kwargs):
print(request.body)
#data = QueryDict(request.body).dict() data = request.POST.dict()
Idcc.objects.create(**data)
status={'status':'1'}
return JsonResponse(status)
def delete(self,request,*args,**kwargs):
pk=kwargs.get('pk')
print(pk)
Idcc.objects.get(id=pk).delete()
status={'status':'1'}
return JsonResponse(status)
def put(self,request,*args,**kwargs):
pk = kwargs.get('pk')
data = QueryDict(request.body).dict()
print(data)
Idcc.objects.filter(id=pk).update(**data)
status={'status':'1'}
return JsonResponse(status)