Ich kämme seit einiger Zeit durch das Internet, ohne eine Lösung für dieses Problem zu finden.Django: Zugreifen auf das übergeordnete Objekt in einem neuen linline-Objekt
Was ich zu tun versuchen ...
Ich habe die folgenden Modelle:
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)
Nun ist das wichtigste Modell verfolgt, so dass mein Admin für Tracking-wie folgt aussieht:
class TrackingEventInline(admin.TabularInline):
model = TrackingEvent
extra = 0
class TrackingAdmin(admin.ModelAdmin):
inlines = [TrackingEventInline]
Das war es für das aktuelle Setup.
Jetzt meine Suche:
Im TrackingAdmin, wenn ich neue TrackingEvent inlines hinzufügen möchte ich die Möglichkeiten von TrackingEventType begrenzen diejenigen onlye, die auf dem letzten TrackingEvent der Verfolgung sind erlaubt zu folgen. (Tracking.last_event == TrackingEventType.required_previous_event).
Dazu müsste ich in der Lage sein, auf das InlineTrackingEvent-Tracking zuzugreifen, um auf das last_event zuzugreifen und die Optionen für TrackingEventType entsprechend zu filtern.
So fand ich dies: Accessing parent model instance from modelform of admin inline, aber wenn ich TrackingEventInline entsprechend eingerichtet:
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
ich ein KeyError at /admin/.../tracking/2/change/ 'parent_object'
von self.parent_object = kwargs.pop('parent_object')
Kennt jemand bekommen, wie dieses Problem zu lösen? Gehe ich das Problem falsch an? Ich denke, das wäre ziemlich einfach in einer benutzerdefinierten Form im Frontend, aber ich möchte wirklich den Admin verwenden, weil die ganze Anwendung so aufgebaut ist, dass sie vom Admin benutzt wird, und es wäre verdammt viel Arbeit, einen Custom zu erstellen Admin-Schnittstelle nur wegen dieses Problems :)
Ok, also habe ich das gefunden: http://StackOverflow.com/Questions/1883296/prepopulating-inlines-based-on-the-parent-model-in -the-django-admin und das: http://stackoverflow.com/questions/442040/pre-populate-an-inline-formset und werde sehen, wo ich von dort gehen kann .. – platzhersh