首页 > 解决方案 > save() 缺少 1 个必需的位置参数“self”

问题描述

This is view:


def add_bus_save(request):
if request.method=="POST":
    Type=request.POST.get("Type")
    Number_of_Seats=request.POST.get("Number_of_Seats")
    driver=request.POST.get("driver")
    hostess=request.POST.get("hostess")
    manager_id=request.POST.get("manager_id")
    staff_id=request.POST.get("staff_id")
    if driver.isalpha()==False:
        messages.error(request, 'Enter name of valid alphabets')
        return redirect('add_bus')
    elif hostess.isalpha()==False:
        messages.error(request, 'Enter name of valid alphabets')
        return redirect('add_bus')
    else:
        try:
            bus.Type=Type
            bus.Number_of_Seats=Number_of_Seats
            bus.driver=driver
            bus.hostess=hostess
            manager_obj1=Manager.objects.get(id=manager_id)
            bus.manager_id=manager_obj1
            staff_obj1=Staff.objects.get(id=staff_id)
            bus.staff_id=staff_obj1
            bus.save()    #Error
            messages.success(request,"Successfully Added Bus")
            return HttpResponseRedirect(reverse("add_bus"))
        
        except:
            messages.error(request,"Failed to Add Bus")
            return HttpResponseRedirect(reverse("add_bus"))
else:
    return render(request, 'add_bus.html')

这里 Bus 表在 model.py 文件中定义:

class Bus(models.Model):
id=models.AutoField(primary_key=True)
manager=models.ForeignKey(Manager,on_delete=models.CASCADE,null=True )
staff=models.ForeignKey(Staff,on_delete=models.CASCADE, null=True )
created_at=models.DateTimeField(auto_now_add=True)
updated_at=models.DateTimeField(auto_now_add=True)
Type=models.TextField()
Number_of_Seats=models.IntegerField()
driver=models.CharField(max_length=255)
hostess=models.CharField(max_length=255)
objects=models.Manager()

我想把bus.save()保存到mysql,但是bus.save()上报错,TypeError: save() missing 1 required positional argument: 'self',我应该怎么解决?我正在尝试通过 form.py 将数据保存在总线中,但保存时出错:

bus.Type=Type
bus.Number_of_Seats=Number_of_Seats
bus.driver=driver
bus.hostess=hostess
manager_obj1=Manager.objects.get(id=manager_id)
bus.manager_id=manager_obj1
staff_obj1=Staff.objects.get(id=staff_id)
bus.staff_id=staff_obj1
bus.save()    #Error

标签: pythondjangodjango-modelsdjango-formsdjango-views

解决方案


为了保存一个新对象,您首先必须实例化一个。然后您可以为其分配值并将其保存到数据库中。

[...]
    else:
        try:
        [...]
            # Instantiate object
            bus = Bus()
            
            # Define values
            bus.field1 = value_1
            bus.field2 = value_2
            [...]

            # Save object
            bus.save()
        [...]
[...]

有一个模型Bus

class Bus(models.Model)
    field1 = [...]
    field2 = [...]
    [...]

推荐阅读