36

新しいモデルインスタンスが保存されたときにユーザーにメールを送信しようとしていますが、そのモデルインスタンスの管理ページへのリンクをメールに含める必要があります。正しいURLを取得する方法はありますか?Djangoにはその情報がどこかに保存されている必要があると思います。

4

5 に答える 5

59

@JosvicZammitをはぎ取ろうとはしていませんが、ここで使用するContentTypeのは間違ったアプローチです。これは無駄なDBクエリです。_meta属性からrequire情報を取得できます。

from django.urls import reverse

info = (model_instance._meta.app_label, model_instance._meta.model_name)
admin_url = reverse('admin:%s_%s_change' % info, args=(model_instance.pk,))
于 2012-05-02T20:13:12.490 に答える
44

このDjangoスニペットは次のことを行う必要があります。

from django.urls import reverse
from django.contrib.contenttypes.models import ContentType
from django.db import models

class MyModel(models.Model):

    def get_admin_url(self):
        content_type = ContentType.objects.get_for_model(self.__class__)
        return reverse("admin:%s_%s_change" % (content_type.app_label, content_type.model), args=(self.id,))

self親モデルクラスをself.id参照します。つまり、オブジェクトのインスタンスを参照しますid。メソッドシグネチャの上にデコレータをproperty貼り付けることで、モデルにとして設定することもできます。@property

編集:以下のChris Prattによる回答は、テーブル上にDBクエリを保存しContentTypeます。instance._meta私の答えはまだ「機能」しており、Djangoモデルの内部にあまり依存していません。ご参考までに。

于 2012-05-02T19:26:03.617 に答える
12

これにより、Josvic Zammitのスニペットと同じ結果が得られますが、データベースにはヒットしません。

from django.urls import reverse
from django.db import models

class MyModel(models.Model):

    def get_admin_url(self):
        return reverse("admin:%s_%s_change" % (self._meta.app_label, self._meta.model_name), args=(self.id,))
于 2014-10-04T07:14:42.897 に答える
10

Python3にも対応しているこの1つのライナーを使用するだけです。

from django.urls import reverse

reverse('admin:{0}_{1}_change'.format(self._meta.app_label, self._meta.model_name), args=(self.pk,))

詳細については、django管理サイトのドキュメントで管理URLを逆にしてください。

于 2013-11-16T03:15:20.337 に答える
5

したがって、Chris、Josvic、Joshの回答を組み合わせて、モデルに追加できるコピー&ペースト方法を次に示します(Django 1.8.3でテスト済み)。

def get_admin_url(self):
    """the url to the Django admin interface for the model instance"""
    from django.core.urlresolvers import reverse
    info = (self._meta.app_label, self._meta.model_name)
    return reverse('admin:%s_%s_change' % info, args=(self.pk,))
于 2015-07-30T22:03:59.437 に答える