Django如何在一个表单上输入多个记录
我正在使用以下型号编写日历应用程序:Django如何在一个表单上输入多个记录,django,django-forms,django-templates,django-admin,modelform,Django,Django Forms,Django Templates,Django Admin,Modelform,我正在使用以下型号编写日历应用程序: class CalendarHour(models.Model): ''' Each day there are many events, e.g. at 10 am, the framer orders material, etc. ''' day_id = models.ForeignKey(CalendarDay) time = models.TimeField() work = models.T
class CalendarHour(models.Model):
'''
Each day there are many events, e.g. at 10 am, the framer orders
material, etc.
'''
day_id = models.ForeignKey(CalendarDay)
time = models.TimeField()
work = models.TextField()
def __unicode__(self):
return 'work that took place at {work_time}'.format(work_time = self.time)
class CalendarDay(models.Model):
'''
Each project has so many daily logs. But, each daily log belongs to only one project (OneToMany relationship)
'''
company_id = models.ForeignKey(CompanyCalendar)
day_date = models.DateField(auto_now_add = True) # Recording the date each log is entered in
deadline = models.DateField() # The date for the daily log
现在,我想基于这些模型创建一个表单,该表单包含当天的信息,但有24行条目实例,每行代表一小时。因此,在forms.py中:
#forms.py
从django.forms导入ModelForm
class HourForm(ModelForm):
class Meta:
model = CalendarHour
fields = ['entry_id', 'day_date', 'deadline']
class DayForm(ModelForm):
class Meta:
model = CalendarDay
fields = ['company_id', 'day_date', 'deadline']
# In views.py:
...
class CalendarSubmit(View):
template_name = 'calendar/submit.html'
today_calendar = CalendarDay
each_hour_calendar = CalendarHour
def get(self, request):
return render(request, self.template_name, {'form1': self.toady_calendar, 'form2':self.each_hour_calendar })
def post(self, request):
today = self.today_calendar(request.POST)
each_hour = self.each_hour_calendar(request.POST)
if today.is_valid():
today_calendar.save()
if each_hour.is_valid():
each_hour_calendar.save()
现在,我可以在模板中显示两种不同的表单,form_day和form_hour。我甚至可以将form2字段重复24次,但当它被发布时,第一个小时就被保存在数据库中,其他的都被忽略了。我知道在管理中,有一个添加按钮可以添加多个实例,但我不知道在我的例子中如何实现这一点:如何在一个表单上显示两个相关模型,其中引用模型需要多次填充
感谢您的帮助。谢谢您,丹尼尔!我会阅读文档,并会让你知道是否这样做。没错,我认为Django Formset适合你的情况谢谢你,丹尼尔!我做了阅读。不过我还是有个问题。当用户输入一个时间时,Django抛出一个异常,抱怨输入数据不是带有时区的timestamp类型。time_aware=pytz.timezone(“加拿大/太平洋”).localize(event_datetime,is_dst=None)和instance.time=time_aware也没有成功!还是一样的错误。有什么想法吗?