Django学习日志——mydoit之模块篇(一)

8 篇文章 0 订阅
7 篇文章 0 订阅

最近在学习Django,打算自己做一个网站mydoit, 边写边学。

IDE:PyCharm 2.0, 一个强大的商业IDE。在网上可以找到注册码。

VC:注册了一个Github的账号。PyCharm上可以设置连接到各种VC,还是很方便的。

Python:2.7.2

Django: 1.3


还是要介绍一下mydoit是干嘛的。其实就是打算模仿一个用来管理to-do task的网站 Doit 来做的。最主要的功能就是添加和查看tasks。在创建好一个Django项目后,添加一个名叫task的app。models.py如下:

from django.db import models
from django.contrib.auth.models import User

class Project(models.Model):
    name = models.CharField(max_length=50)
    user = models.ForeignKey(User)
    last_updt_date = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return self.name

    class Meta:
        db_table = "project"


class Context(models.Model):
    name = models.CharField(max_length=50)
    user = models.ForeignKey(User)
    last_updt_date = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return self.name

    class Meta:
        db_table = "context"

class Event(models.Model):
    description = models.CharField(max_length=50)
    user = models.ForeignKey(User)
    last_updt_date = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return self.description

    class Meta:
        db_table = "event"


class Task(models.Model):
    name = models.CharField(max_length=50)
    #use foreign key instead of OneToOneField, One to one with unique = True
    project = models.ForeignKey(Project)
    context = models.ForeignKey(Context)
    description = models.CharField(max_length=200)
    deadline = models.DateTimeField()
    event = models.ForeignKey(Event)
    user = models.ForeignKey(User)
    last_updt_date = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return self.name

    class Meta:
        db_table = "task"

class Tag(models.Model):
    name = models.CharField(max_length=50)
    task_id = models.ForeignKey(Task)
    user = models.ForeignKey(User)
    last_updt_date = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return self.name

    class Meta:
        db_table = "tag"


一个task,具有多个属性,我把这些属性,都单独的建立一个model。例如一个task,只能属于一个project,有多个的tag等等。


遇到的问题:

  • 开始时,在task的模块里,错误的使用project = models.OneToOne(Project),根据Django文档所述,“A one-to-one relationship. Conceptually, this is similar to a ForeignKey with unique=True, but the "reverse" side of the relation will directly return a single object.”,意思是project这个字段的值必须是unique的,即一个project只能对应一个task。而这个项目要求是一个project,可以对应多个task,所以要用到ForeignKey,而不是OneToOne。
  • 在每个模块里,添加了user字段。一方面是为了给多用户使用,另一方面是为做checking所用。

         


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值