методы модели Джанго - PullRequest
0 голосов
/ 06 мая 2011

Есть ли лучший способ обработать эти функции внутри модели?

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, поэтому иногда проще написать метод из одной или двух строк и использовать его в list_display = () модели администратора, а не переписывать шаблон только для того, чтобы изменить одну строку.

Я пытался определить поля модели в одном классе и наследовать в классе этими методами, но это довольно странно.

Есть ли у вас какие-либо предложения?

Это примерная модель для этого варианта использования

Ответы [ 2 ]

5 голосов
/ 06 мая 2011

Я не совсем уверен, что вы пытаетесь сделать, но это может быть полезно.Во-первых, как правило, вы не должны помещать форматирование / отображение типа информации (например, 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>
1 голос
/ 06 мая 2011

Будет ли get_absolute_url работать на то, что вы пытаетесь сделать?Вы просто выгружаете тег привязки в свой шаблон и используете метод get_absolute_url () для получения URL.Если вы затем используете постоянная ссылка декоратор , вы можете привязать его прямо к вашей URL-маршрутизации.Любые изменения в ваших URL для просмотра контракта / печати / образца будут автоматически отражаться на вашем сайте без необходимости обновления файла models.py в соответствии с новой структурой URL.

...