Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅更新模型中的一个字段时发生django错误_Django_Django Models - Fatal编程技术网

仅更新模型中的一个字段时发生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)