Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
Python Django在新行输入时不立即保存?_Python_Django_Django Orm - Fatal编程技术网

Python Django在新行输入时不立即保存?

Python Django在新行输入时不立即保存?,python,django,django-orm,Python,Django,Django Orm,我有一个django项目,设置如下: myapp.models.py from django.db import models class BaseModel(models.Model): id = models.IntegerField(primary_key=True) created = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True)

我有一个django项目,设置如下:

myapp.models.py

from django.db import models

class BaseModel(models.Model):
    id = models.IntegerField(primary_key=True)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True

class Source(BaseModel):
    name = models.CharField(max_length=32, unique=True)
    base_url = models.ForeignKey('URL', on_delete=models.CASCADE)

class URL(BaseModel):
    url = models.TextField(max_length=512, unique=True)
    url_source = models.ForeignKey('Source', on_delete=models.CASCADE, null=True, blank=True)
在一个单独的functions.py文件中,我有一个脚本,用于用所有新数据引用的一些初始已知数据填充数据库。i、 e.索引从许多已知
网站找到的未知编号和目标
URL
链接

functions.py

# Create non-runtime db access
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MY_PROJECT.settings")
import django
django.setup()

from MYAPP import models

sources = {
        'website-one': {'base_url': 'https://www.website-one.com'},
        'website-two': {'base_url': 'https://www.website-two.com'},
        'website-three': {'base_url': 'https://www.website-three.com'},
    }
    for name, meta in sources.items():

        new_url = models.URL.objects.create(url=meta['base_url'])

        print(new_url.id)
运行时,
print
函数返回
None
None
None
,我认为这意味着新的
URL
对象尚未保存。如果我随后检查数据库,我可以看到每个对象都已成功创建,并且具有预期的
id
字段

我的意图是使用这个:

new_url = models.URL.objects.create(url=meta['base_url'])
要在下一行添加对新
源的引用,请执行以下操作:

new_source = models.Source.objects.create(name=name, base_url=new_url)
为什么这样不行

注意

脚本运行后,我可以在数据库中看到所有新的
URL
对象都已提交,并按预期分配了
id
字段,尽管它们不能立即在脚本中引用(问题)

注意

执行此操作时:

new_url = models.URL.objects.create(url=meta['base_url'])
new_url.save()

我得到一个
django.db.utils.IntegrityError:UNIQUE constraint失败
错误,这似乎表明新
URL
的条目确实存在。

您没有在functions.py中导入URL模型

id = models.IntegerField(primary_key=True)
在基础模型中


如果您有非自动字段ID字段,则需要手动指定它们的值。

您是否故意显式创建该
ID
字段?如果您有非自动字段ID字段,则需要手动指定它们的值。我是,但我没有意识到我没有设置
ID=models.AutoField(primary\u key=True)
。解决了这个问题。给我一个答案,我就接受。很乐意帮忙!你是对的,虽然那只是我的一个错误。导入
模型
,并将
URL
引用为
模型。URL
。我更新了问题以反映这一点,尽管问题正如@AKX所指出的那样。