首页 > 代码库 > 自关联、中间件

自关联、中间件

M2M自关联特性:

class UserInfo(models.Model):
    nickname = models.CharField(max_length=32)
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    gender_choices = (
        (1,),
        (2,),
    )
    gender = models.IntegerField(choices=gender_choices)
    m = models.ManyToManyField(UserInfo)
    
会额外生成一张表,userinfo_m   里面有三列id 、from_userinfo_id、to_userinfo_id
M2M自关联特性:
    obj = models.UserInfo.objects.filter(id=1).first()
    # from_userinfo_id
    obj.m          => select xx from xx where from_userinfo_id = 1
    
    # to_userinfo_id
    obj.userinfo_set => select xx from xx where to_userinfo_id = 1    
定义:
    # 前面列:男生ID
    # 后面列:女生ID
查男生
xz = models.UserInfo.objects.filter(id=1).first()
u = xz.m.all()   
for row in u:
    print(row.nickname)
查女神
xz = models.UserInfo.objects.filter(id=4).first()
v = xz.userinfo_set.all()
for row in v:
    print(row.nickname)                

FK自关联:

class Comment(models.Model):
    """
    评论表
    """
    news_id = models.IntegerField()            # 新闻ID
    content = models.CharField(max_length=32)  # 评论内容
    user = models.CharField(max_length=32)     # 评论者
    reply = models.ForeignKey(Comment,null=True,blank=True,related_name=xxxx)
    #blank   Admin中是否允许用户输入为空

"""
   新闻ID                         reply_id
1   1        别比比    root         null
2   1        就比比    root         null
3   1        瞎比比    shaowei      null
4   2        写的正好  root         null
5   1        拉倒吧    由清滨         2
6   1        拉倒吧1    xxxxx         2
7   1        拉倒吧2    xxxxx         5
"""
"""
新闻1
    别比比
    就比比
        - 拉倒吧
            - 拉倒吧2
        - 拉倒吧1
    瞎比比
新闻2:
    写的正好
"""

中间件

在配置setting中MIDDLEWARE就是中间件
创建一个文件m1.py
from django.utils.deprecation import MiddlewareMixin

from django.shortcuts import HttpResponse
class Middle1(MiddlewareMixin):
    def process_request(self, request):
        print(m1.process_request)        结果直接传递给下一个中间件。
        # return HttpResponse(不要再往下传了)
        如果有返回值,就不再传递给下一个中间件了。

    def process_response(self, request, response):
        print(m1.process_response)
        return response   必须要返回,不然下一个中间件不能拿到结果。


在配置setting中MIDDLEWARE添加中间件m1
“m1. Middle1”

 

自关联、中间件