У меня есть проект 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
возвращает 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)
Почему это не работает?
NOTE
Послескрипт запускается, я вижу в базе данных, что все новые URL
объекты были зафиксированы и имеют id
поля, назначенные должным образом, хотя на них нельзя немедленно ссылаться в скрипте (проблема.)
ПРИМЕЧАНИЕ
При этом:
new_url = models.URL.objects.create(url=meta['base_url'])
new_url.save()
Я получаю ошибку django.db.utils.IntegrityError: UNIQUE constraint failed
, которая, по-видимому, указывает на то, что запись для нового URL
существует.