Python 使用faker在django中填充模型
[1] 此代码未引发完整性错误的原因:唯一约束失败 在population.py文件中:- 行top=add_topic()将被调用10次,这意味着它将创建10次 主题表的实例,但无法创建10个主题表实例 因为它的列是唯一的。所以,我的问题是,这段代码是否应该抛出唯一的约束错误?因为它不是,而且运行得很好。为什么?Python 使用faker在django中填充模型,python,django,orm,model,faker,Python,Django,Orm,Model,Faker,[1] 此代码未引发完整性错误的原因:唯一约束失败 在population.py文件中:- 行top=add_topic()将被调用10次,这意味着它将创建10次 主题表的实例,但无法创建10个主题表实例 因为它的列是唯一的。所以,我的问题是,这段代码是否应该抛出唯一的约束错误?因为它不是,而且运行得很好。为什么? #models.py file from django.db import models # Create your models here. class Topic(mode
#models.py file
from django.db import models
# Create your models here.
class Topic(models.Model):
top_name = models.CharField(max_length = 264,unique = True )
def __str__(self):
return self.top_name
class Webpage(models.Model):
topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
name = models.CharField(max_length = 264, unique = True)
url = models.URLField(unique = True)
def __str__(self):
return self.name
class AccessRecord(models.Model):
name = models.ForeignKey(Webpage, on_delete=models.CASCADE)
date = models.DateTimeField()
def __str__(self):
return str(self.date)
[以下是populateone.py引发的错误]
[1] :如果top_名称具有
Unique=True
,则此字段在整个表中必须是唯一的
但由于get\u或\u create
,因此未显示错误。这里get\u或\u create
的作用是返回一个元组,即(object,created)。第一个是您试图获取的模型的一个实例,第二个是一个标志,用于指示实例是否已创建True表示该实例是通过get\u或\u create
方法创建的,False表示该实例是从数据库中检索到的
如果不存在,则
get\u或\u create
将创建一个实例。否则它只会更新现有实例。get\u或\u create
在不存在相应对象时创建一个新实例,否则它只会获取现有对象OK,我现在正在添加新代码,该代码会引发该错误。请您澄清为什么会发生这种情况?@Prakar kesarwani我看到您的编辑模型在populationone.py上引发错误,对吗?对错误要更具体一些,如果你能分享错误就好了。是的,你说得对,先生。我的问题是,当populateone.py文件与populateone.py文件几乎相同时,为什么populateone.py文件会抛出错误。我现在还包括了错误文件。请检查链接。
#population.py file
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE','protwo.settings')
import django
django.setup()
import random
from first_app.models import AccessRecord,Topic,Webpage
from faker import Faker
fakegen = Faker()
topics = ['Search', 'Social', 'Marketplace', 'News', 'Games']
def add_topic():
t = Topic.objects.get_or_create(top_name = random.choice(topics))[0]
t.save()
return t
def populate(N = 10):
for entry in range(N):
top = add_topic()
fake_url = fakegen.url()
fake_date = fakegen.date()
fake_name = fakegen.company()
webpg = Webpage.objects.get_or_create(topic = top, url = fake_url, name = fake_name)[0]
acc_rec = AccessRecord.objects.get_or_create(name = webpg, date = fake_date)[0]
if __name__ == "__main__":
print('populating script')
populate(20)
print('populating complete!')
#populationone.py file
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE','advcbv.settings')
import django
django.setup()
from basicapp.models import Students, Schools
from faker import Faker
import random
fakegen = Faker()
allschools = ['Central Academy', 'Patanjali', 'LBS', 'Dev Prayag', 'SRM', 'DPS']
def add_topic():
fake_principal = fakegen.prefix() + fakegen.name()
fake_location = fakegen.address()
t = Schools.objects.get_or_create(sch_name = random.choice(allschools), principal = fake_principal, location = fake_location)[0]
t.save()
return t
def populate(n = 10):
for i in range(n):
school_obj = add_topic()
fake_name = fakegen.name()
fake_age = random.randint(10,16)
student_obj = Students.objects.get_or_create(school = school_obj, stud_name = fake_name, age = fake_age)[0]
if __name__ == '__main__':
print('populating script')
populate(20)
print('population complete')
#modelsone.py file
from django.db import models
# Create your models here.
class Schools(models.Model):
sch_name = models.CharField(max_length = 256,unique = True)
principal = models.CharField(max_length = 256)
location = models.CharField(max_length = 256)
def __str__(self):
return self.name
class Students(models.Model):
stud_name = models.CharField(max_length = 256)
school = models.ForeignKey(Schools, on_delete = models.CASCADE,related_name='related_students')
age = models.PositiveIntegerField()
def __str__(self):
return self.name