【问题标题】:django model's methodsdjango模型的方法
【发布时间】:2011-08-20 08:19:43
【问题描述】:

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

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')

我的模型本身已经重载了很多。这些功能使我的模型文件几乎不可读。我有几十个。我需要这些。

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

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

你有什么建议吗?

This is a sample model for this usecase

【问题讨论】:

  • 你说“那些”是什么意思?

标签: python django methods model field


【解决方案1】:

我不完全确定您要做什么,但这可能会有所帮助。首先,作为一般规则,您不应该将格式化/显示类型的信息(例如 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>

【讨论】:

  • @Alex,是的,但这不是基于你所说的。 :) 我怀疑我们是同时开始回答的,只是我花了更长的时间来输入格式化的代码。 :)
  • @ John C,是的,这就是我提高你的答案的原因。你有代码,我没有:)
  • 查看我的代码示例(问题中的链接)并检查此用例:list_display = ( 'season', 'uid_decorator', 'customer_decorator', 'comment2_decorator', 'group_decorator', 'day_decorator', 'type_decorator', 'comment_decorator', 'signup_date', 'resignation_date' )
【解决方案2】:

get_absolute_url 会为您尝试做的事情工作吗?您只需将锚标记卸载到模板中并使用 get_absolute_url() 方法获取 url。如果您随后使用permalink decorator,您可以将其直接绑定到您的 url 路由中。对合同/打印/示例视图的 url 的任何更改都将自动反映在整个站点中,而无需更新您的 models.py 文件以匹配新的 url 结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多