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

Create multiple instances of the model in one query

有一个包含多个字段的表单和一个处理它的视图

views.py

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

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

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

views.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

models.py

class Vehicle(models.Model):

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

为此,我推荐 Django Formsets: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()

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