gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 06:28:47 25 4
gpt4 key购买 nike

我是 Django 和 SQlite3 的新手。我有一个模型(人),外键为(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 manage.py shell 向 Person 添加条目。

到目前为止,我已经尝试过:

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

但这会返回一个错误:ValueError: Cannot assign "'Appellant'": "Person.pers_type"must be a "Person_Type"instance.

字符串“Appellant”已作为值之一存储在“Person_Type.pers_type”表中。我需要更改什么才能使其引用 pers_type 字段?

如果需要,我们很乐意提供更多详细信息。非常感谢您的宝贵时间。

最佳答案

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)

或者,考虑到数据库中不存在“Appellant”的情况:

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)

关于python - Django/Sqlite3 为带有外键的模型添加一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7321241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com