1

モデル内の 1 つのフィールドのみを更新したいと考えています。ただし、エラーが発生します。

これは私のモデルです:

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)

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'

テーブルのフィールドを 1 つだけ更新するのを手伝ってくれませんか?

4

2 に答える 2

4

saveどちらの場合も、モデル クラスではなく、作成したモデル インスタンスを呼び出す必要があります。つまりa、 ではなくを保存する必要がありSalaryます。

a.salary=500
a.save()

するとSalary().save()、変更したばかりのインスタンスをコミットするのではなく、まったく新しい空のモデル インスタンスを作成し、それをデータベースにコミットしようとします。

于 2012-09-29T23:24:18.853 に答える
0

モデルで ForeignKey が定義されている場合、制約は db レベルで適用されるため、参照オブジェクトを保存する前に、Foreign キーによるオブジェクト参照を保存する必要があります。

また、外部キーを個人または給与で定義する必要があるかどうかを再検討することもできます。

モデルを次のように定義するとします。

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

これの良いところは、 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.IntegerField(required=False)
于 2012-09-29T23:56:45.820 に答える