gpt4 book ai didi

django - 根据 Django Admin 中的父模型预填充内联

转载 作者:行者123 更新时间:2023-12-03 09:43:34 25 4
gpt4 key购买 nike

我有两个型号,EventSeries ,其中每个事件属于一个系列。大多数情况下,事件的 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 .到目前为止,我已经为 Event 创建了一个模型管理表单,并使用了 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对象到表单,您可以在其中使用它为您的字段设置默认值。

关于django - 根据 Django Admin 中的父模型预填充内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1883296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com