0

モデル メソッドが_get_admin_urlあり、URL を動的に構築したいと考えています。

class Person(models.Model):
    ...

    def _get_admin_url(self):
        "Returns the admin url."
        # return '/admin/some_app/person/%d' %self.id
        return '/admin/%s/%s/%d/' %(..., ..., d)

    admin_url = property(_get_admin_url)

app_label とクラス名の値を取得するにはどうすればよいですか? それとももっと良い方法がありますか?

4

2 に答える 2

0

ContentType で app_name と model_name を設定することも可能です: https://stackoverflow.com/a/11395481/991572

だから私はこれをやってしまったwebapp/models.py

from django.contrib.contenttypes.models import ContentType
from django.core import urlresolvers

class Base(models.Model):
    title = models.CharField(max_length=100)

    def _get_admin_url(self):
        "Returns the admin change view url."
        content_type = ContentType.objects.get_for_model(self.__class__)
        view_name = "admin:%s_%s_change" % (content_type.app_label, content_type.model)
        url = urlresolvers.reverse(view_name, args=(self.id,)) 
        return url

    admin_url = property(_get_admin_url)            

class Book(Base):
    something = models.CharField(max_length=100)

Base と Book を管理サイトに登録し、いくつかのエントリを作成し、シェルで:

In [1]: from webapp.models import *

In [2]: Base.objects.get(pk=1).admin_url
Out[2]: '/admin/webapp/base/1/'

In [3]: Book.objects.get(pk=2).admin_url
Out[3]: '/admin/webapp/book/2/'
于 2013-10-02T21:52:58.140 に答える