ModuleNotFoundError, когда модуль, очевидно, установлен, Django

Мой финальный проект по курсу Python - создание сайта пиццы с помощью Django.

У меня есть init.py, forms.py, main.py, manage.py, models.py, myapp.forms, settings.py, и README.md, согласно тому, что Tabnine сказал, что мне нужно для запуска этого.

Каждый раз, когда я пытаюсь запустить сайт, вместо того, чтобы получить доступ к нему по адресу 127.0.0.1:8000, он не запускается, а в конце выдает ModuleNotFoundError: No module named myapp.forms, несмотря на то, что он есть, установлен правильно, как я могу сказать с помощью Pylint, и я в растерянности.

Содержание README:

PizzaProject/
├── myapp/
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py  # Your OrderForm should be here
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── PizzaProject/
├── manage.py
└── settings.py

init.py:

from django.apps import AppConfig

class MyappConfig(AppConfig):
    name = 'myapp'

forms.py:

from django import forms
from django.db import models  # Import models from django.db instead of django.models

class OrderForm(forms.ModelForm):
    """Form for creating and updating Order instances."""

    class Meta:
        """Meta class for OrderForm."""

        model = models.Model  # Use models.Model instead of django.models.Model
        fields = ['pizza', 'toppings', 'customer_name', 'customer_phone']

main.py:

from django.shortcuts import render, redirect
from myapp.forms import OrderForm
from myapp.models import Pizza, Topping

def menu_view(request):
    """View function for the menu page."""
    pizzas = Pizza.objects.filter(is_available=True)
    toppings = Topping.objects.filter(is_available=True)
    return render(request, 'menu.html', {'pizzas': pizzas, 'toppings': toppings})


def confirm_order_view(request):
    """View function for the order confirmation page."""
    if request.method == 'POST':
        form = OrderForm(request.POST)
        if form.is_valid():
            order = form.save(commit=False)
            order.calculate_total()
            order.save()
            form.save_m2m()  # Save ManyToMany toppings
            return redirect('order_success')
    else:
        form = OrderForm()
    return render(request, 'confirm.html', {'form': form})


def success_view(request):
    return render(request, 'order_success.html')

Тестовый файл, для размышлений:

"""This module contains test cases for the menu view."""
import django.test

from myapp.models import Pizza, Topping

class MenuViewTestCase(django.test.TestCase):
    def setUp(self):
        self.factory = django.test.RequestFactory()
        Pizza.objects.create(name="Margherita", is_available=True)
        Pizza.objects.create(name="Pepperoni", is_available=False)
        Topping.objects.create(name="Cheese", is_available=True)
        Topping.objects.create(name="Mushrooms", is_available=False)

myapp.forms:

from django import forms
from django.db import models  # Import models from django.db instead of django.models

class OrderForm(forms.ModelForm):
    """Form for creating and updating Order instances."""

    class Meta:
        """Meta class for OrderForm."""

        model = models.Model  # Use models.Model instead of django.models.Model
        fields = ['pizza', 'toppings', 'customer_name', 'customer_phone']

settings.py:

INSTALLED_APPS = [
    'myapp.apps.MyappConfig',  # Add your app here#
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

]

Я могу включить models.py, но у меня там нет проблем, так что я могу придержать его, чтобы никто не смог забрать проект.

После ввода «python manage.py startapp myapp» в терминале проекта через PyCharm, он пытается запустить приложение, но завершается тем, что снова говорит: «ModuleNotFoundError: Нет модуля с именем myapp.forms. Изображение журнала ошибок

(.venv) PS C:\Users\ME\PycharmProjects\PizzaProject> python manage.py startapp myapp
INFO:     Will watch for changes in these directories: ['C:\\Users\\ME\\PycharmProjects\\PizzaProject']
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [16444] using WatchFiles
Process SpawnProcess-1:
Traceback (most recent call last):
  File "C:\Users\ME\AppData\Local\Programs\Python\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap
    self.run()
  File "C:\Users\ME\AppData\Local\Programs\Python\Python312\Lib\multiprocessing\process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\ME\PycharmProjects\PizzaProject\.venv\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started
    target(sockets=sockets)
  File "C:\Users\ME\PycharmProjects\PizzaProject\.venv\Lib\site-packages\uvicorn\server.py", line 65, in run
    return asyncio.run(self.serve(sockets=sockets))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ME\AppData\Local\Programs\Python\Python312\Lib\asyncio\runners.py", line 194, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "C:\Users\ME\AppData\Local\Programs\Python\Python312\Lib\asyncio\runners.py", line 118, in run
    return self._loop.run_until_complete(task)
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 995, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "C:\Users\ME\PycharmProjects\PizzaProject\main.py", line 2, in <module>
    from myapp.forms import OrderForm
ModuleNotFoundError: No module named 'myapp.forms'

Я хочу иметь возможность подключаться к тестовому веб-сайту через URL по адресу 127.0.0.1:8000, как я и настроил.

Если кто-нибудь знает, почему он так себя ведет, я буду очень, очень признателен за помощь.

Вероятно, вы неправильно создали свой проект. Рекомендуется создать ваш проект Django с помощью команды django-admin startproject <project_name> .

Это должно быть сделано в виртуальном окружении, которое, судя по всему, вы уже используете. Также в этой среде должен быть установлен Django, что, как я полагаю, вы и сделали. Обратите внимание на точку . после project_name в команде startproject. Рекомендуется использовать ее, если вы хотите получить более аккуратную структуру каталогов, см. ответ здесь Using period symbol after django-admin startproject <projectname>. Ваша директория project_name должна содержать настройки файлов, WSGI, URL и т.д., а в корневой директории вы должны увидеть файл manage.py.

Вы можете продолжить создание приложения, используя команду python manage.py startapp <app_name> Это создаст каталог app с моделями, представлениями, файлами и т.д. Здесь вы должны хранить файлы forms.py и urls.py уровня app, которые вы должны создать сами, см. https://realpython.com/django-setup/

Ваша ошибка: Я не уверен, почему у вас есть файл main.py, мне он кажется похожим на views.py. Он не отображается в дереве каталогов, которым вы поделились, но вы включили этот файл, и именно отсюда и исходит ваша ошибка. Так что, возможно, вы захотите пролить на это больше света.

Кроме того, похоже, что вы хотите запустить локальный веб-сервер Django, но по ошибке выполняете команду создания нового приложения. Чтобы запустить локальный веб-сервер, используйте команду python manage.py runserver. Убедитесь, что вы перенесли свои модели с помощью команд python manage.py makemigrations и python manage.py migrate. См. docs.

Обращайтесь в комментариях, если вам нужна дополнительная информация или помощь.

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