(Джанго) (Фабричный мальчик) (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
  1. Previously I tried using from_path and the same error occurred. This time I am using from_file as I thought giving r+ permission would fix the error. How do I fix it?

  2. Also, when creating Factories do I have to assign fake values to every model field or if I don't specify the fields then will the Factory Boy automatically do it for me?

  3. I have used OneToOne Field from my Restaurant Model to the Django custom user model. Is the way I am creating factories correct?

Вернуться на верх