尝试用Faker填充Django应用数据库

问题描述

我试图用Faker填充Django数据库。 我创建了一个Django项目(名称= first_project),然后创建了Django应用(名称= first_app)。 我在应用程序中创建了模型,然后在主first_project文件夹(包含manage.py的文件夹)中创建了一个名为“ populate_first_app.py”的文件,并填充了以下代码

import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE','first_project.settings')
 
import django
django.setup()
 
import random
from first_app.models import Topic,Webpage,AccessRecord
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=5):
 
    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!")

进行迁移并运行代码后,我的终端显示

(MyDjangoEnv) E:\Django\first_project>python populate_first_app.py
populating script!
Traceback (most recent call last):
  File "populate_first_app.py",line 34,in <module>
    populate(20)
  File "populate_first_app.py",line 28,in populate
    webpg = Webpage.objects.get_or_create(topic=top,name=fake_name)[0]
  File "C:\Users\vedan\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\manager.py",line 85,in manager_method
    return getattr(self.get_queryset(),name)(*args,**kwargs)
  File "C:\Users\vedan\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\query.py",line 573,in get_or_create
    return self.get(**kwargs),False
  File "C:\Users\vedan\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\query.py",line 418,in get
    clone = self._chain() if self.query.combinator else self.filter(*args,line 942,in filter
    return self._filter_or_exclude(False,*args,line 962,in _filter_or_exclude
    clone._filter_or_exclude_inplace(negate,line 969,in _filter_or_exclude_inplace
    self._query.add_q(Q(*args,**kwargs))
  File "C:\Users\vedan\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\sql\query.py",line 1358,in add_q
    clause,_ = self._add_q(q_object,self.used_aliases)
  File "C:\Users\vedan\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\sql\query.py",line 1377,in _add_q
    child_clause,needed_inner = self.build_filter(
  File "C:\Users\vedan\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\sql\query.py",line 1258,in build_filter
    lookups,parts,reffed_expression = self.solve_lookup_type(arg)
  File "C:\Users\vedan\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\sql\query    _,field,_,lookup_parts = self.names_to_path(lookup_splitted,self.get_Meta())
  File "C:\Users\vedan\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\sql\query.py",line 1481,in names_to_path
    raise FieldError("Cannot resolve keyword '%s' into field. "
django.core.exceptions.FieldError: Cannot resolve keyword 'topic' into field. Choices are: Topic,Topic_id,accessrecord,id,name,url

有人可以帮助我吗? PS:我是新手,这是我的第一个问题。

谢谢:)

解决方法

df = (aud_baskets) for (colToRank,rankedName) in zip(['expenditure'],['basket_rank']): wA = Window.orderBy(asc(colToRank)) df_w_rank = (df.withColumn('raw_rank',rank().over(wA))) ties = df_w_rank.groupBy('raw_rank').count().filter("""count > 1""") df_w_rank = (df_w_rank.join(ties,['raw_rank'],'left').withColumn(rankedName,expr("""case when count is not null then (raw_rank + count - 1) else raw_rank end"""))) rankedNameGroup = rankedName n = df_w_rank.count() df_with_rank_groups = (df_w_rank.withColumn(rankedNameGroup,expr("""FLOOR({rankedName} *{k}/({n}+1))""".format(k=10,n=n,rankedName=rankedName)))) df = df_with_rank_groups aud_baskets_ranks = df_with_rank_groups.drop('raw_rank','count') 方法中使用Topic代替topic

get_or_create()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...