自關聯、中間件
阿新 • • 發佈:2017-07-03
spa 下一個 添加 resp ati lte rfi key eply
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”
自關聯、中間件