Django 不立即保存新行条目?
Django not saving immediately on new row entry?
我有一个 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 文件中,我有以下脚本,它旨在用一些初始的 已知 数据填充数据库,所有这些数据都将被引用新数据。即索引未知数量和目标 URL
从许多已知 Source
网站找到的链接。
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
函数 returns None
、None
、None
我将其解释为新的 URL
对象尚未保存。如果我之后检查数据库,我可以看到每个对象都已成功创建并且具有预期的 id
字段。
我的意图是使用这个:
new_url = models.URL.objects.create(url=meta['base_url'])
在下一行中添加对新 Source
的引用:
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 failed
错误,这似乎表明新 URL
的条目确实存在。
您没有在 functions.py
中导入您的 URL 模型
您目前有
id = models.IntegerField(primary_key=True)
在基本模型中。
如果您有非 AutoField ID 字段,则需要手动指定它们的值。
我有一个 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 文件中,我有以下脚本,它旨在用一些初始的 已知 数据填充数据库,所有这些数据都将被引用新数据。即索引未知数量和目标 URL
从许多已知 Source
网站找到的链接。
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
函数 returns None
、None
、None
我将其解释为新的 URL
对象尚未保存。如果我之后检查数据库,我可以看到每个对象都已成功创建并且具有预期的 id
字段。
我的意图是使用这个:
new_url = models.URL.objects.create(url=meta['base_url'])
在下一行中添加对新 Source
的引用:
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 failed
错误,这似乎表明新 URL
的条目确实存在。
您没有在 functions.py
中导入您的 URL 模型您目前有
id = models.IntegerField(primary_key=True)
在基本模型中。
如果您有非 AutoField ID 字段,则需要手动指定它们的值。