仅更新模型中的一个字段时发生django错误
我只想更新模型中的一个字段。然而,我得到了一个错误 这是我的模型:仅更新模型中的一个字段时发生django错误,django,django-models,Django,Django Models,我只想更新模型中的一个字段。然而,我得到了一个错误 这是我的模型: class People(models.Model): name = models.CharField(max_length=100) lastname = models.CharField(max_length=100) class Salary(models.Model): id_of_people=models.ForeignKey(People) salary = models.Inte
class People(models.Model):
name = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
class Salary(models.Model):
id_of_people=models.ForeignKey(People)
salary = models.IntegerField(required=False)
In views.py
-当我尝试更新此选项时:
def update(request):
a=Salary.objects.get(id_of_people_id=1)
a.salary=500
Salary().save()
我的错误是:
IntegrityError at/update
salary.id_of_people_id may not be NULL
回溯表明:
Salary().save()
-当我尝试这个时:
def update(request):
a=Salary.objects.get(id_of_people_id=1)
a.salary=500
Salary().save(save_fields=['salary'])
-我得到这个错误:
save() got an unexpected keyword argument 'save_fields'
您能帮我只更新表中的一个字段吗 在这两种情况下,您都希望对已创建的模型实例而不是模型类调用
save
——也就是说,您应该保存a
,而不是Salary
:
a.salary=500
a.save()
当您执行
Salary().save()
时,您会创建一个全新的空模型实例,然后尝试将其提交到数据库,而不是提交刚刚修改的模型实例。在这两种情况下,您都希望对已创建的模型实例调用save
,不是模型类——也就是说,您应该保存a
,而不是Salary
:
a.salary=500
a.save()
执行
Salary().save()
时,所发生的情况是创建一个全新的空模型实例,然后尝试将其提交到数据库,而不是提交刚刚修改的实例。如果在模型中定义了ForeignKey,约束将在db级别强制执行,因此在保存引用对象之前,需要使用外键保存对象引用
您可能还需要重新考虑外键是否应该在person或Salary中定义
如果要这样定义模型:
class Person(models.Model):
name = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
salary = models.ForeignKey(Salary)
class Salary(models.Model):
amount = models.IntegerField(required=False)
def update(request):
s = Salary(amount=request.POST['salary'])
s.save()
p = Person(name=request.POST['name'], lastname=request.POST['lastname'], salary=s)
p.save()
class Person(models.Model):
name = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
salary = models.IntegerField(required=False)
然后您可以定义视图函数,使其如下所示:
class Person(models.Model):
name = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
salary = models.ForeignKey(Salary)
class Salary(models.Model):
amount = models.IntegerField(required=False)
def update(request):
s = Salary(amount=request.POST['salary'])
s.save()
p = Person(name=request.POST['name'], lastname=request.POST['lastname'], salary=s)
p.save()
class Person(models.Model):
name = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
salary = models.IntegerField(required=False)
这样做的好处是,您可以引用Person实例中的工资:
Person.objects.get(pk=1).salary.amount
我忍不住要问一个问题,为什么你真的需要在不同的对象中使用这些。如果您的模型如下所示,事情可能会更简单:
class Person(models.Model):
name = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
salary = models.ForeignKey(Salary)
class Salary(models.Model):
amount = models.IntegerField(required=False)
def update(request):
s = Salary(amount=request.POST['salary'])
s.save()
p = Person(name=request.POST['name'], lastname=request.POST['lastname'], salary=s)
p.save()
class Person(models.Model):
name = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
salary = models.IntegerField(required=False)
如果在模型中定义了外键,则约束将在db级别强制执行,因此在保存引用对象之前,需要使用外键保存对象引用 您可能还需要重新考虑外键是否应该在person或Salary中定义 如果要这样定义模型:
class Person(models.Model):
name = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
salary = models.ForeignKey(Salary)
class Salary(models.Model):
amount = models.IntegerField(required=False)
def update(request):
s = Salary(amount=request.POST['salary'])
s.save()
p = Person(name=request.POST['name'], lastname=request.POST['lastname'], salary=s)
p.save()
class Person(models.Model):
name = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
salary = models.IntegerField(required=False)
然后您可以定义视图函数,使其如下所示:
class Person(models.Model):
name = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
salary = models.ForeignKey(Salary)
class Salary(models.Model):
amount = models.IntegerField(required=False)
def update(request):
s = Salary(amount=request.POST['salary'])
s.save()
p = Person(name=request.POST['name'], lastname=request.POST['lastname'], salary=s)
p.save()
class Person(models.Model):
name = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
salary = models.IntegerField(required=False)
这样做的好处是,您可以引用Person实例中的工资:
Person.objects.get(pk=1).salary.amount
我忍不住要问一个问题,为什么你真的需要在不同的对象中使用这些。如果您的模型如下所示,事情可能会更简单:
class Person(models.Model):
name = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
salary = models.ForeignKey(Salary)
class Salary(models.Model):
amount = models.IntegerField(required=False)
def update(request):
s = Salary(amount=request.POST['salary'])
s.save()
p = Person(name=request.POST['name'], lastname=request.POST['lastname'], salary=s)
p.save()
class Person(models.Model):
name = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
salary = models.IntegerField(required=False)