在一个查询中创建模型的多个实例

2024-04-26 03:57:33 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个具有多个字段的窗体和一个处理它的视图

视图.py

class VehiclesBlacklistAddView(ObjectAddView):
    model = Vehicle
    form_class = VehicleForm
.....

    def process_valid_form(self, request, form):
        form.instance.save()

没关系,很有效。但现在我希望能够通过逗号将多个值添加到表单的一个item_id字段中,并创建多个实例,而不是一个实例

视图.py

def process_valid_form(self, request, form):
    # print(form.instance.__dict__)
    items = [id.strip() for id in form.instance.item_id.split(',')]
    for i in items:
        form.instance(item_id=i).save()

但我犯了一个错误

'Vehicle' object is not callable

型号.py

class Vehicle(models.Model):

    item_type = models.CharField()
    item_id = models.CharField()
    desc = models.CharField()

Tags: instancepyselfform视图idmodelsrequest
1条回答
网友
1楼 · 发布于 2024-04-26 03:57:33

为此,我推荐Django表单集:https://docs.djangoproject.com/en/3.1/topics/forms/formsets/

我还建议你研究一下bulk_create:https://docs.djangoproject.com/en/3.0/ref/models/querysets/#bulk-create

但要回答你的问题:

错误是针对行form.instance(item_id=i).save()

这是一个已经创建的实例,一个Vehicle。 为了创建更多,您应该导入Vehicle并创建它的实例并保存它们:

for i in items:
    instance = Vehicle(
        item_id=i, # this is buggy and will not be unique the next submission - should be an AutoField
        item_type=form.cleaned_data.get('item_type'),
        desc=form.cleaned_data.get('desc')
    )
    instance.save()

然后不要在表单保存时保存绑定到表单的一个实例

相关问题 更多 >