2011-05-06 74 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