我有两个模型,Event
and Series
,其中每个事件都属于一个系列。大多数时候,一个事件start_time
与其系列相同default_time
.
这是模型的精简版本。
#models.py
class Series(models.Model):
name = models.CharField(max_length=50)
default_time = models.TimeField()
class Event(models.Model):
name = models.CharField(max_length=50)
date = models.DateField()
start_time = models.TimeField()
series = models.ForeignKey(Series)
我在管理应用程序中使用内联,以便我可以一次编辑系列的所有事件。
如果已经创建了一个系列,我想预先填充start_time
对于该系列的每个内嵌活动default_time
。到目前为止,我已经为事件创建了一个模型管理表单,并使用了initial
使用固定时间预填充时间字段的选项。
#admin.py
...
import datetime
class OEventInlineAdminForm(forms.ModelForm):
start_time = forms.TimeField(initial=datetime.time(18,30,00))
class Meta:
model = OEvent
class EventInline(admin.TabularInline):
form = EventInlineAdminForm
model = Event
class SeriesAdmin(admin.ModelAdmin):
inlines = [EventInline,]
我不知道如何从这里继续。是否可以扩展代码,使初始值start_time
字段是系列'default_time
?
我认为你需要通过 ModelAdmin 关闭一个函数:
def create_event_form(series):
class EventForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
# You can use the outer function's 'series' here
return EventForm
这里系列将是series
实例。
然后在内联管理类中:
class EventInlineAdmin(admin.TabularInline):
model = Event
def get_formset(self, request, obj=None, **kwargs):
if obj:
self.form = create_foo_form(obj)
return super(EventInlineAdmin, self).get_formset(request, obj, **kwargs)
编辑:这种方法将使您能够通过series
对象到表单,您可以使用它来设置字段的默认值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)