• django建立模型的一些体会(原创)


    最近使用django做后台实现了一个简单的在线博客系统。其中使用django建立模型(也就是所谓的数据表)碰到了很多问题,也学到了很多,现在奉献出来与大家分享。
    1.我碰到的第一个问题是要建立一个日志的模型。日志中有作者属性,其中作者是一个模型。定义如下:
    //这个和定义面向关系数据库很类似,就不说了~
    class Users(models.Model):
        username = models.CharField(primary_key = True, max_length = 30)
        password = models.CharField(max_length = 30)
        nickname = models.CharField(max_length = 30)
    现在来定义日志的模型。
    作者和日志是一对多关系,所以可以在Diary中使用ForeignKey
    class Diary(models.Model):
        user       = models.ForeignKey(Users)
        Title      = models.CharField(max_length = 100)
        Content    = models.CharField(max_length = 1000) #no restriction
        Type       = models.CharField(max_length = 30)
        Attri      = models.CharField(max_length = 10)
        PublicDate = models.DateField()
    但是使用这个模型就要小心了~因为如果我们检索日志,直接返回Diary.objects.all()的话,那么返回的结果中,user是空的!因为在Diary中,User属性只是一个引用。这时就要:d = Diary.objects.select_related();这个很关键
    2. 建立好友模型。该模型描述如下:一个用户有很多好友,并且可以对好友进行分组。如果按照面向关系的数据库的定义的话,我们可以这样:首先定义个user表,
    然后定义一个Group表,表中有user, friend, Groupname属性。但是使用Django建立这样的模型时,它会提示出错~不能在一个模型中存在两个指向统一模型的引用。这时就需要另外一种定义模型的方法。
       分析好友模型,我们可以得知,用户与其好友是多对多关系。这样就好办了,django提供了一个ManyToManyField关键字,用来定义这种关系。
    class Friend(models.Model):
        friend = models.ManyToManyField(Users)

    class Group(models.Model):
        user       = models.ForeignKey(Users)
        member     = models.ForeignKey(Friend)
        groupname  = models.CharField(max_length = 100)
        def __unicode__(self):
            return self.groupname   
    这样便可以定义个多对多关系了~

          ----David Cai 2009-8-31晚于金山公司
  • 相关阅读:
    获取桌面路径
    Winform判断一个窗口是否以模态化方式打开
    Winform弹出子窗体
    Winform 窗体传值 利用委托 子窗体传值给父窗体
    GridView中小的应用
    GridView显示水平滚动条
    GridView中常用属性的设置
    将DevExpress GridView中的数据原样导出到Excel中
    DevExpress 16.2如何汉化
    C#使用NPOI导出Excel
  • 原文地址:https://www.cnblogs.com/xingluzhe/p/1557535.html
Copyright © 2020-2023  润新知