python - (Django) (Factory Boy) (Errno 13) 权限被拒绝
问题描述
所以,我是 Django 的一个完整的初学者,并试图弄清楚如何用随机数据填充数据库。
当我尝试运行py manage.py setup_test_data
时出现以下错误
from seller.factories import *
File "C:\Users\Suyash Singh\Desktop\SwaadBackend1\seller\factories.py", line 13, in <module>
f = open(r"C:\Users\Suyash Singh\Desktop\SwaadBackend1\staticfiles\dish", 'r+')
PermissionError: [Errno 13] Permission denied: 'C:\\Users\\Suyash Singh\\Desktop\\SwaadBackend1\\staticfiles\\dish'
#factories.py
import factory
import faker
from faker import Faker
from factory.base import Factory
from factory.declarations import SubFactory
from factory.django import DjangoModelFactory
import random
from core.models import User
from seller.models import Dish, Restaurant
fake = Faker()
f = open(r"C:\Users\Suyash Singh\Desktop\SwaadBackend1\staticfiles\dish", 'r+')
f1 = open(r"C:\Users\Suyash Singh\Desktop\SwaadBackend1\staticfiles\logo", 'r+')
CATEGORIES = [
"Sweets",
"Rolls",
"Kebabs",
"Chaat",
"Paneer",
"Pizza",
"Chicken",
"Healthy",
"Biryani",
"Shawarma",
"Thali",
"Momos",
"Burger",
"Dal",
'Dosa',
"Chaap",
]
MEAL_TIME = [
"Breakfast",
"Lunch",
"Dinner"
]
class Provider(faker.providers.BaseProvider):
def dish_category(self):
return self.random_element(CATEGORIES)
def dish_meal_time(self):
return self.random_element(MEAL_TIME)
fake.add_provider(Provider)
class DishFactory(DjangoModelFactory):
class Meta:
model = Dish
photo = factory.django.ImageField(from_file= f, width=500, height=500)
restaurant = factory.SubFactory('seller.factories.RestaurantFactory')
price = random.randint(50, 600)
title = factory.Faker('dish_category')
veg = random.choice([True, False])
category = factory.Faker('dish_category')
meal_time = factory.Faker('dish_meal_time')
class RestaurantFactory(DjangoModelFactory):
class Meta:
model = Restaurant
user = SubFactory('seller.factories.UserFactory')
rest_name = factory.Faker('name')
phone = fake.phone_number()
address = fake.address()
logo = factory.django.ImageField(from_file= f1, width=500, height=500)
class UserFactory(DjangoModelFactory):
class Meta:
model = User
name = factory.Faker('name')
email = factory.Faker('email')
password = factory.PostGenerationMethodCall('set_password', 'test@123')
is_active = True
f.close()
f1.close()
#setup_test_data.py
import random
from django.db import transaction
from django.core.management.base import BaseCommand
from core.models import User
from seller.models import Restaurant, Dish
from seller.factories import *
class Command(BaseCommand):
help = "Generate Test Data"
def handle(self, *args, **kwargs):
for _ in range(300):
dish = DishFactory.create()
print(dish.title)
assert True
以前我尝试使用 from_path 并且发生了同样的错误。这次我使用 from_file ,因为我认为给予 r+ 权限可以修复错误。我如何解决它?
另外,在创建工厂时,我是否必须为每个模型字段分配假值,或者如果我没有指定字段,那么 Factory Boy 会自动为我做吗?
我使用了从我的餐厅模型到 Django 自定义用户模型的 OneToOne 字段。我创建工厂的方式正确吗?
解决方案
推荐阅读
- laravel - 在 laravel 中每次测试后重置 Redis 数据库
- c++ - 树中的内存分配
- javascript - 如何自定义地图并删除“POI 图层”?
- regex - 使用 JMeter 正则表达式提取器中的正则表达式匹配多个换行符
- google-cloud-platform - 谷歌云项目:使用自定义界面创建
- python - 比较数据框中的行
- python - tf.nn.sparse_softmax_cross_entropy_with_logits 的意外输出
- cmake - 如何保留 CMake 生成的文件?
- java - 从函数返回通用对象
- c# - 单点登录,iframe,会话不起作用