我一直在开发一些Django应用程序,并且有一些重复的代码用于不同的模型。我想创建一个通用表模板,并将Model类,模型实例列表和Form类传递给它,以便它可以呈现页面并生成表单来添加/删除元素。然后创建一些通用的添加/删除视图以使用此表单。
为每个不同的模型定义模板配置的正确部分是什么?如果我只是创建一些类静态变量和函数,这是正确的:
class Test(models.Model):
# Model
name = models.CharField(max_length=20)
description = models.TextField(blank=True)
# Template configuration
title = "Test"
table_columns = ['name', ] # Columns I want to show in the table
def get_columns(self):
return [self.name, ]
或者在Django中有一些更清晰的方法来定义这类东西吗?
编辑:似乎我想用来配置模板的一些信息已经有一个名字,应该放在model.Meta里面,比如verbose_name或verbose_name_plural。
答案 0 :(得分:0)
我对你的问题和你的代码并不是很确定,但这里有一篇关于_meta
的简短故事...
要访问类的列名,可以检查类的_meta
属性。
实施例。一个示例模型,它定义了三个字段和一个辅助方法whats_inside
,它只是迭代_meta.fields
并打印出类的列的名称:
from django.db import models
def whats_inside(cls):
for item in cls._meta.fields:
print item.name
class Sample(models.Model):
name = models.CharField(max_length=80)
desc = models.CharField(max_length=80)
date_added = models.DateTimeField(auto_now=True, auto_now_add=True)
当我们开始./manage shell
时,我们可以使用whats_inside
作为参数调用Sample
(注意:ms
只是模型在这种情况下所处的包,您的将会不同):
$ ./manage.py shell
Python 2.6 (r26:66714, Oct 4 2008, 02:48:43)
Type "copyright", "credits" or "license" for more information.
IPython 0.9.1 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.
In [1]: from ms.models import Sample, whats_inside
In [2]: whats_inside(Sample)
id
name
desc
date_added
In [3]:
答案 1 :(得分:0)
正如MYYN所说,你的问题不是很清楚。但是我假设您想要执行以下操作:
我会使用自定义模板标签,而不是在模型中包含代码(因为它纯粹是一个演示文稿问题,即您希望模型中的所有字段都可用,但只显示其中的一些)。例如,您可以创建一个模板标记,您可以调用它:
{% gen_table somemodel %}
Documentation for template tags
另请阅读custom template tags以及我sample code的一些精彩帖子。
我也注意到你似乎在你的模型类中定义了一个自定义方法,但我相信这样做的方法是创建一个custom model manager(读this blog post),也可以是一个例子。找到here