【发布时间】:2016-10-24 00:45:24
【问题描述】:
我已经在互联网上梳理了很长一段时间,但没有找到任何解决此问题的方法。
我正在尝试做什么......
我有以下型号:
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)
现在主要模型是 Tracking,所以我的 Tracking 管理员看起来像这样:
class TrackingEventInline(admin.TabularInline):
model = TrackingEvent
extra = 0
class TrackingAdmin(admin.ModelAdmin):
inlines = [TrackingEventInline]
这就是当前的设置。
现在我的任务:
在 TrackingAdmin 中,当我添加新的 TrackingEvent 内联时,我想将 TrackingEventType 的选项限制为仅允许跟随跟踪的最后一个 TrackingEvent 的选项。 (Tracking.last_event == TrackingEventType.required_previous_event)。
为此,我需要能够访问 InlineTrackingEvent 上的相关跟踪,以访问 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
我从self.parent_object = kwargs.pop('parent_object') 得到一个KeyError at /admin/.../tracking/2/change/ 'parent_object'
有谁知道如何解决这个问题?我是否以错误的方式解决问题?我想这在前端的自定义表单中会很容易,但我真的很想使用管理员,因为整个应用程序都是为管理员使用而构建的,构建自定义的工作量很大管理界面只是因为这个问题:)
【问题讨论】:
-
好的,我找到了这个:stackoverflow.com/questions/1883296/… 和这个:stackoverflow.com/questions/442040/…,然后看看我可以从那里去哪里..
标签: django django-forms django-admin