1

管理画面のトップページに機種ごとに指定のアイコンを追加したい。各モデルに「picture」という名前の属性を追加し、/contrib/admin/sites.py を変更してその画像名をテンプレートに渡し、それをチェックして admin の index.html テンプレートで使用して結果を取得しました。もっと良い方法がないか知りたい

class Product(models.Model):
    abbr = models.CharField(max_length=20,unique=True)
    title = models.CharField(max_length=200,unique=True)
    owner = models.ForeignKey(UserProxy)
    des = models.TextField(blank=True,null=True)
    picture =  'product.png'    
    def __unicode__(self):
        return self.abbr
    class Meta:
        none
4

2 に答える 2

5

あなたがしたことは問題ないように思えますが、あなたのコードを少し良くするための小さなヒントのみです:

  1. 変更する代わりにdjango/contrib/admin/sites.py、クラスをサブクラス化できますAdminSite(まだサブクラス化していない場合)。
  2. AdminSite.index()画像ではなく管理クラス全体を渡すようにメソッドを変更します (メソッドmodel_adminで使用可能な変数がありますindex())。
  3. モデルではなく ModelAdmin クラスに画像を割り当てて、管理者をモデルから分離します。
于 2013-08-28T20:28:58.617 に答える
0

「Python Fanboy」からの回答は非常に簡潔でしたが、役に立ちました。django の基本クラスの変更を避けることができました。

  1. 画像フィールドは管理者クラスに移動されました
  2. AdminSite を CustomAdminSite としてサブクラス化し、index と app_index をコピーして変更を加えました (オーバーライドのように index と app_index 全体をコピーするよりも良い方法があるかどうかはわかりません)。
  3. urls.py では、' admin.sites.url' が ' ' に置き換えられますcustom_site.url(custom_siteのインスタンスですCustomAdminSite)
  4. /admin' ' like ' ' の代わりに別の URL が必要ないため、ユーザー、グループ、サイトを含むすべてのモデルで の/my_adminインスタンスを使用する必要がありますCustomAdminSite
  5. を使用してadmin_toolsいますが、アプリケーション メニューが表示されなくなりました

新しく遭遇した問題に対するより良いアイデアや解決策はありますか?

于 2013-09-02T08:18:20.277 に答える