我想覆盖Django表单保存方法,以便能够一次创建多个对象.

我有一款AvailableHours型:

class AvailableHours(models.Model):
    free_date = models.ForeignKey(AvailableDates,null=True, blank=True,on_delete=models.CASCADE,related_name='freedate')
    free_hours_from = models.IntegerField(null=True, blank=True)
    free_hours_to = models.IntegerField(null=True, blank=True,)
    status = models.BooleanField(null=True,default=True,)

我有一个这个类的ModelForm:

class TimeGenerator(forms.ModelForm):
    class Meta:
        model = AvailableHours

        fields = ['free_date','free_hours_from','free_hours_to','status']

    def save(self, commit=True):
        m = super(TimeGenerator, self).save(commit=False)
        self.free_hours_from = self.cleaned_data['free_hours_from']
        self.free_hours_to = self.cleaned_data['free_hours_from'] +1
        m.save()
        for hour in range(self.cleaned_data['free_hours_from'],self.cleaned_data['free_hours_to']+1):
            self.free_hours_from = self.cleaned_data['free_hours_from']+hour
            self.free_hours_to = self.cleaned_data['free_hours_from']+hour+1
            print(hour)
            m.save()

我想创建多个AvailableHour对象,如下所示: 如果将表单设置为FREE_HOURS_FROM=13和FREE_HOURS_TO=16 因此,保存方法创建13-14、14-15、15-16

我在上面的表单中写了一段代码,并覆盖了save(),但它不起作用. 有人有解决办法吗?

推荐答案

您可以使用以下命令创建项目并批量保存这些项目:

class TimeGenerator(forms.ModelForm):
    class Meta:
        model = AvailableHours

        fields = ['free_date', 'free_hours_from', 'free_hours_to', 'status']

    def save(self, commit=True):
        base_item = super().save(commit=False)
        frm = self.cleaned_data['free_hours_from']
        to = self.cleaned_data['free_hours_to']
        items = [
            AvailableHours(
                free_date=base_item.free_date,
                status=base_item.status,
                free_hours_from=hour,
                free_hours_to=hour + 1,
            )
            for hour in range(frm, to)
        ]
        if commit:
            AvailableHours.objects.bulk_create(items)
        return items

也就是说,如果AvailableHours总是free_hours_from加1,那么AvailableHours的字段是free_hours_to,这是很奇怪的.

Django相关问答推荐

为什么当对字段使用自定义序列化器时,Django Rest框架中Inbox字段会消失?

Django 中主键的隐式 UUID 自动字段

在 Trunc 的 kind 属性中使用字段

SQLite上可以正常使用Many2Many链接注释,但MariaDB上无法正常使用(生产环境)

如何重命名标准 django-registration 模板的名称

Django celery 页面给出 404

Django 长时间运行带有线程/处理的异步任务

Django 模板文件夹

Django JSONField 过滤

Django 模板上的 URL 编码

Django:通过manage.py使用服务器和gunicorn等其他服务器之间的区别.哪个更好?

用于测试文件下载的 Django 单元测试

如何在 django 中生成 url

Django 基于角色的视图?

Django - 如何在其管理模块中访问模型的详细名称?

如何在django中生成临时文件然后销毁

如何在 Django 中向 ChoiceField 添加class?

如何在python中遍历httprequest post变量

Django 删除未使用的媒体文件

如何在 django 中使用更少的 css?