2011-12-22 22 views
2

私はadmin LogEntryオブジェクト/テーブルを使用してアプリケーションにイベントを記録しています。私は、それぞれのLogEntryを表示したいと考えています。
LogEntryを実際のオブジェクトと結合することができれば本当に素晴らしいです(ログエントリを使ってオブジェクトのインライン属性を表示することができます) 理論上、これはモデルタイプとIDを持っているので簡単ですLogEntryしかし、私はどのようにクエリセットを使用してそれらを結合するのか分からない。django - LogEntryを実際のモデルに結合する

私はちょうど別のオブジェクトのすべてのIDをつかみ、各オブジェクトタイプの別の辞書を作って、どういうわけか(おそらく一緒にリストを圧縮するのでしょうか?)しかし、それはあまりにもdjano-ish/pythonic 。

誰か良い提案はありますか?

** edit ** adminを使用するのではなく、カスタムビューとテンプレートをロールバックするだけです。

答えて

2

私が知っているように、Djangoはcontenttypes frameworkを使用してadminでログインします。したがって、モデル内でジェネリックリレーションを作成し、管理者用のGenericTabularInlineとGenericStackedInlineでインラインを表示する必要があります。記事と相談してください。

from django.contrib import admin 
from django.contrib.admin.models import LogEntry 
from django.contrib.contenttypes.generic import GenericTabularInline 
from django import forms 
from some_app import models 
from some_app.models import Item 

class LogForm(forms.ModelForm): 
    class Meta: 
     model = LogEntry 

class LogInline(GenericTabularInline): 
    ct_field = 'content_type' 
    ct_fk_field = 'object_id' 
    model = LogEntry 
    extra = 0 

class ItemForm(forms.ModelForm): 
    class Meta: 
     model = Item 

class ItemAdmin(admin.ModelAdmin): 
    form = ItemForm 
    inlines = [LogInline,] 


admin.site.register(models.Item, ItemAdmin) 

、あなたが項目に追加します。

class Item(models.Model): 
    name = models.CharField(max_length=100) 
    logs = generic.GenericRelation(LogEntry) 

+0

クール以前は一般的な関係は一度も使用していません。私の場合は、logEntryオブジェクトに対してモデル内で一般的な関係を作成することをお勧めしますか? –

+0

答えをexampleで更新しました。お役に立てれば。 – Ilya

+0

ああ、コードサンプルありがとう。物事をもっとはっきりさせる。カップルのもの。 1番目:管理者を使用したくありません。私は自分のビューとテンプレートをロールバックしたい。 2番目:この方法で私にすべてのアイテムのリストが表示され、その後、視覚アイテムを見るとすべてのログが表示されます。私はそれを逆にする必要がある。私は途中で各項目のログエントリと詳細のリストが必要です。これは、クエリが実行されるクエリがアイテムではなくLogEntriesに基づいているため、意味があります。どうも! –

0

最近Djangoのバージョンはプロキシを作成するために必要と同期する必要はありませんので、この変更は、データベースには何も作成しませんLogEntry:

from django.contrib import admin 
from django.contrib.admin.models import LogEntry 
from django.contrib.contenttypes.generic import GenericTabularInline 

class LogEntryProxy(LogEntry): 
    content_object = GenericForeignKey('content_type', 'object_id') 
    class Meta: 
     proxy = True 

class LogInline(GenericTabularInline): 
    model = LogEntry 
    extra = 0 

class ItemAdmin(admin.ModelAdmin): 
    inlines = [LogInline,] 

admin.site.register(models.Item, ItemAdmin) 
関連する問題