django上课笔记5

Posted _慕

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django上课笔记5相关的知识,希望对你有一定的参考价值。

一、FK关联

 

技术分享
FK关联
    url.py里
        from app01 import views
        urlpatterns = [
            url(r^admin/, admin.site.urls),
            url(r^index.html$, views.index),
        ]

    views.py里
        from django.shortcuts import render,HttpResponse
        from app01 import models
        def index(request):
            zgl = models.UserInfo.objects.filter(username=zgl,gender=1).first()  # 拿到要查询的对象

            result = zgl.girls.all()  # 去U2U里拿到所有的b_id
            for u in result:
                print(u.g.nickname)   # 拿到b_id所对应的.g的女孩的nickname

            return HttpResponse(successfully done)
            
    models.py里
        from django.db import models

        class UserInfo(models.Model):
            nickname = models.CharField(max_length=16)
            username = models.CharField(max_length=16)
            passwd = models.CharField(max_length=64)
            gender_choice = (
                (1,),
                (2,),
            )
            gender= models.IntegerField(choices=gender_choice)
            
        # 反向查询时
        # related_query_name
        # obj对象男.U2U.girls_set.all()
        # obj对象女.U2U.boys_set.all()
        # related_name
        # obj对象男.girls.all()
        # obj对象女.boys.all()

        class U2U(models.Model):
            g = models.ForeignKey(UserInfo,related_name=boys)
            b = models.ForeignKey(UserInfo,related_name=girls)


        
    M2M自关联特性:
        models.py里
            from django.db import models

            class UserInfo(models.Model):
                nickname = models.CharField(max_length=16)
                username = models.CharField(max_length=16)
                passwd = models.CharField(max_length=64)
                gender_choice = (
                    (1,),
                    (2,),
                )
                gender= models.IntegerField(choices=gender_choice)
                m = models.ManyToManyField(UserInfo)  # 自己关联自己
                
        views.py里
            def index(request):
                #查女生
                girl = models.UserInfo.objects.filter(id=4,gender=2).first()  # 拿到要查询的对象
                result = girl.userinfo_set.all() 
                for row in result:
                    print(row.nickname)

                return HttpResponse(successfully done)
        
        obj = models.UserInfo.objects.filter(id=1).first()
        # 对于from_userinfo_id 相当于正向查询通过.m的方式
        obj.m          => select xx from xx where from_userinfo_id = 1
        
        # 对于to_userinfo_id  相当于反向查询通过.userinfo_set的方式
        obj.userinfo_set => select xx from xx where to_userinfo_id = 1
        
    
    定义:
        # 前面列:男生ID
        # 后面列:女生ID
        
    应用:
        # 男生对象
        obj = models.UserInfo.objects.filter(id=1).first()
        # 根据男生ID=1查找关联的所有的女神
        obj.m.all()
        
        # 女生
        obj = models.UserInfo.objects.filter(id=4).first()
        # 根据女生ID=4查找关联的所有的男生
        obj.userinfo_set.all()
    问题:
    当打不开页面,发生404错误时
        url(r^index.html$/, love.index) # index.html$后边不要加反斜杠
View Code

 

以上是关于django上课笔记5的主要内容,如果未能解决你的问题,请参考以下文章

Django项目笔记——聊天功能的实现

django上课笔记1

Django项目笔记——联机对战的实现

django上课笔记6

django上课笔记2

django上课笔记4