Django / Sqlite3为带有外键的模型添加一行

pbgvytdp  于 2023-03-03  发布在  SQLite
关注(0)|答案(1)|浏览(124)

我是Django和SQlite3的新手,我有一个模型(Person),有一个外键(Person_Type):

class Person(models.Model):
    name = models.CharField(max_length=500)
    pers_type = models.ForeignKey(Person_Type)

    def __unicode__(self):
        return self.name

class Person_Type(models.Model):
    pers_type = models.CharField(max_length=40)

    def __unicode__(self):
        return self.pers_type

我正在尝试使用python www.example.com shell向Person添加条目。manage.py shell.
到目前为止,我已经尝试过:

import sqlite3
from trials.models import *

conn = sqlite3.connect('privy.db')
print Person #this returns <class 'privy.trials.models.Person'>
cur = conn.cursor()
fields = ['name', 'pers_type']
row = ['Adam', 'Appellant']
Person.objects.create(**dict(zip(fields, row)))

但这会返回一个错误:值错误:不能转让"上诉人":"Person. pers_type"必须是"Person_Type"示例。
字符串"Appellant"已经存储为"Person_Type. pers_type"表中的值之一。要使其引用pers_type字段,需要做什么更改?
如果需要的话,我很乐意提供更多的细节。非常感谢您抽出时间。

rkue9o1l

rkue9o1l1#

Person.objects.create(name='Adam', person_type='Appellant')

这里,作为person_type参数,create()方法期望获得person_type示例,而不是字符串
因此,只需提供:

pers_type = Person_Type.objects.get(pers_type='Appelant') # assuming pers_type is unique
Person.objects.create(name='Adam', pers_type=pers_type)

或者,考虑到“上诉人”不在数据库中的情况:

try:
    pers_type = Person_Type.objects.get(pers_type='Appelant')
except Person_Type.DoesNotExists:
    person_type = Person_Type.objects.create(pers_type='Appellant')
Person.objects.create(name='Adam', pers_type=pers_type)

相关问题