提问者:小点点

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')

这里总线表在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()缺少一个必需的位置参数'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

共2个答案

匿名用户

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

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

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

使用总线:

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

匿名用户

bus参数太多。 您应该像这样分配所有总线数据:

bus_form = (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_form.save()