【问题标题】:Trying to populate Django app database with Faker尝试使用 Faker 填充 Django 应用程序数据库
【发布时间】:2021-02-17 12:24:15
【问题描述】:

我正在尝试使用 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,url=fake_url,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, **kwargs)
  File "C:\Users\vedan\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\query.py", line 942, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "C:\Users\vedan\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\query.py", line 962, in _filter_or_exclude
    clone._filter_or_exclude_inplace(negate, *args, **kwargs)
  File "C:\Users\vedan\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\query.py", 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:我是新手,这是我的第一个问题。

谢谢 :)

【问题讨论】:

  • 您没有共享您的模型,但从错误消息来看,我相当有信心认为您应该将 get_or_create 调用中的 topic=top 更改为 Topic=top
  • 是的,我改了。感谢您的帮助:)

标签: python django faker


【解决方案1】:

get_or_create() 方法中使用Topic 而不是topic

webpg = Webpage.objects.get_or_create(Topic=top,url=fake_url,name=fake_name)[0]

【讨论】:

  • 它有效,谢谢。我查看了我的导师的视频,他有“主题”,但它仍然运行良好
  • 您需要在模型中具有完全相同的名称。也许他在他的模型中使用了topic
  • 不,模型是 Topic、Webpage 和 AccessRecord
  • 对不起!你是对的。我不小心将它与模型名称(主题、网页和访问记录)混淆了。再次感谢。
  • 很高兴它成功了。如果您认为这是您问题的解决方案,请用绿色对勾标记,以便有相同问题的人可以快速找到答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 2020-11-16
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
相关资源
最近更新 更多