2011-05-06 69 views
0

有没有更好的方法来处理模型中的这些功能?django模型的方法

class MyModel (models.Model): 
    name = models.CharField(max_length=50) 
    foo = models.CharField(max_length=50) 

    def style_foo(): 
     return '<a href="/contract/print/sample/%s/">%s</a>' % (self.pk, _('View sample')) 

    style_foo.allow_tags = True 
    style_foo.short_description = _('Style sample') 

我有几乎超载的模型本身。这些函数使得我的模型文件几乎不可读。我有几十个。我需要那些。

我正在做一个重要的contrib.admin模板重载的CRM系统,因此有时候编写一行或两行的方法会更容易,并且在Admin模型的list_display =()上使用它并且不会重写模板admin/change_list_result。 html只为了改变一行。

我试图在一个类中定义模型字段并在类中继承这些方法,但这很奇怪。

你有什么建议吗?

This is a sample model for this usecase

+0

当你说'那些'时,你是什么意思? – NT3RP 2011-05-06 16:52:37

回答

1

get_absolute_url你正在试图做了哪些工作?您只需将锚标签卸载到您的模板中,然后使用get_absolute_url()方法获取url。如果您使用permalink decorator,则可以将其直接绑定到您的网址路由中。对合同/打印/样本视图的任何URL更改都会自动反映到整个网站,而不必更新models.py文件以匹配新的网址结构。

5

我不完全确定你想要做什么,但这可能会有所帮助。首先,作为一般规则,您不应将格式化/显示类型的信息(如HTML)放入模型级别。您应该在其他地方格式化HTML,并设计模型以便返回任何给定对象的URL。例如:

# views.py 
from django.db import models 

class MyModel(models.Model): 
    name = models.CharField(max_length=50) 

    @models.permalink 
    def get_absolute_url(self): 
     return ('view-sample', [self.pk]) 

# urls.py 
from myapps.models import view_sample 
urlpatterns = patterns('', 
    url(r'^contract/print/sample/(?P<sample>.*)/$', view_sample, name='view-sample'), 

# view_template.html 
<p><a href="{{ anySample.get_absolute_url }}">Click to view sample</a></p> 
+0

+1这就是我所说的,但添加了代码示例。 – 2011-05-06 17:27:27

+0

@Alex,是的,但它不是基于你所说的。 :)我怀疑我们在同一时间开始回答,只是花了我更长的时间才输入格式化的代码。 :) – 2011-05-06 18:16:55

+0

@约翰C,烨,这就是为什么我提高你的答案。你有代码,我没有:) – 2011-05-06 19:39:50