私はこの問題の解決策を見つけることなくかなりの時間インターネットでコーミングしています。Django:新しいlinelineオブジェクトの親オブジェクトにアクセスする
私がやろうとしています何...
私は次のモデルがあります:
class TrackingEventType(models.Model):
required_previous_event = models.ForeignKey(TrackingEventType)
class TrackingEvent(models.Model):
tracking = models.ForeignKey(Tracking)
class Tracking(models.Model):
last_event = models.ForeignKey(TrackingEvent)
今すぐメインモデルが追跡しているので、トラッキングのための私の管理者は、次のようになります。
class TrackingEventInline(admin.TabularInline):
model = TrackingEvent
extra = 0
class TrackingAdmin(admin.ModelAdmin):
inlines = [TrackingEventInline]
これは現在の設定に適用されます。
は今私の探求:私は新しいTrackingEventのインラインを追加するときTrackingAdminで
は、私が追跡の最後TrackingEventに従うことが許されているものを、onlyeするTrackingEventTypeの選択肢を制限したいです。 (Tracking.last_event == TrackingEventType.required_previous_event)。
このため、InlineTrackingEventの関連するTrackingにアクセスしてlast_eventにアクセスし、それに応じてTrackingEventTypeのオプションをフィルタリングする必要があります。
は、だから私は、この発見: Accessing parent model instance from modelform of admin inlineを、私はそれに応じTrackingEventInline設定するとき:class MyFormSet(forms.BaseInlineFormSet):
def _construct_form(self, i, **kwargs):
kwargs['parent_object'] = self.instance
print self.instance
return super(MyFormSet, self)._construct_form(i, **kwargs)
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
print kwargs
self.parent_object = kwargs.pop('parent_object')
super(MyForm, self).__init__(*args, **kwargs)
class TrackingEventInline(admin.TabularInline):
form = MyForm
formset = MyFormSet
model = TrackingEvent
extra = 0
を私は誰もがこの問題を解決する方法を知っていKeyError at /admin/.../tracking/2/change/ 'parent_object'
self.parent_object = kwargs.pop('parent_object')
から入手しますか?私は間違った方法で問題に近づいていますか?私はこれはフロントエンドのカスタムフォームではかなり簡単だと思いますが、アプリケーション全体が管理者から使用されるようになっているので、実際には管理者を使用したいと思います。カスタムを構築するには大変な作業になりますこの問題のためだけに管理者インターフェイス:
私はこれを見つけました:http://stackoverflow.com/questions/1883296/prepopulating-inlines-based-on-the-parent-model-in -the-django-admin とこれは:http://stackoverflow.com/questions/442040/pre-populate-an-inline-formsetここから私がそこに行くことができるところがわかります。 – platzhersh