在Django中使用模型的最佳方式

时间:2011-08-14 07:32:50

标签: python django django-models

我有一个任务模型:

class Task(models.Model):
    text = models.TextField()
    datetime = models.DateTimeField(auto_now_add=True)
    taken = models.BooleanField(default=False)
    done = models.BooleanField(default=False)
    client = models.ForeignKey('UserProfile', related_name='tasks_given')
    executor = models.ForeignKey('UserProfile', related_name='tasks_received')
    def __unicode__(self):
        return 'Task #'+str(self.id)

我必须处理它的创建,验证,取消等。 最好的方法是什么?在views.py中有一个(对于所有情况)或几个(对于每种情况)函数更好吗?拥有一个包含大量{% if %}的模板是否更好?或者更好地拥有一些模板? 任何其他提示将被赞赏=)

3 个答案:

答案 0 :(得分:0)

您可以使用django-admin网站,如chapter 2 of the tutorial

中所示

答案 1 :(得分:0)

我不完全确定“最佳行动方式”的含义,但如果您想要处理对象创建和验证,则可以在模型中编写额外的方法。

class Task(Models.model):
    ...
    ## fields
    ...

    ## Example of a method on the model
    def validate(self):
        ## validate the model here

我认为您希望最小化视图中的验证代码。如果从您的角度来看,您可以验证如下:

new_task.validate()

而不是必须在每个要使用任务模型的视图中编写验证。

答案 2 :(得分:0)

对于操作,您最好扩展基于类的通用视图,它们非常模块化,已经包含了大部分功能,并且模板名称的合理默认值等。

https://docs.djangoproject.com/en/1.3/ref/class-based-views/#detail-views

它们基于mixin组合,因此对于每个部分或功能步骤,您必须覆盖一个非常具体的方法。一旦你得到它就很简单。

对于模板,请使用extendsinclude标记,避免重复代码。尽量使用大多数自动生成的代码。