Python 使用faker在django中填充模型

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

[1] 此代码未引发完整性错误的原因:唯一约束失败

在population.py文件中:-

top=add_topic()将被调用10次,这意味着它将创建10次 主题表的实例,但无法创建10个主题表实例 因为它的列是唯一的。所以,我的问题是,这段代码是否应该抛出唯一的约束错误?因为它不是,而且运行得很好。为什么?

#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