Django не может импортировать модуль из-за циклического импорта

Следуя учебнику, у меня есть модуль

файлviews.py

#attempt2/src/products/views.py

from django.shortcuts import render
from .forms import ProductForm, RawProductForm
from .models import Product

def product_create_view(request):
    #this creates an instance of that form
    my_form = RawProductForm()
    context = {
        "form": my_form
    }
    return render(request, "product/product_create.html", context)

Но я получаю следующую ошибку

 File "C:\Users\dancc\dev2\attempt2\src\products\views.py", line 2, in <module>
    from .forms import ProductForm, RawProductForm
  File "C:\Users\dancc\dev2\attempt2\src\products\forms.py", line 4, in <module>
    from products.views import product_create_view
ImportError: cannot import name 'product_create_view' from partially initialized module 'products.views' (most likely due to a circular import) (C:\Users\dancc\dev2\attempt2\src\products\views.py)

Я пробовал искать, где он может импортировать другой product_create_view, но другого нет, ни один из файлов или имен папок не повторяется

это forms.py

#attempt2/src/products/forms.py
from django import forms

from products.views import product_create_view
from .models import Product

class ProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = [
            'title',
            'description',
            'price'
        ]

        
#This is what product_create_view is using
class RawProductForm(forms.Form):
    title       = forms.CharField()
    description = forms.CharField()
    price       = forms.DecimalField()

Это файл models.py

#attempt2/src/products/models.py
from django.db import models

# Create your models here.
class Product(models.Model):
    title       = models.CharField(max_length=120) #max_length required
    description = models.TextField(blank=True, null=True)
    price       = models.DecimalField(decimal_places=2, max_digits=10000)
    summary     = models.TextField()

Это файл views.py

#attempt2/src/products/views.py

from django.shortcuts import render
from .forms import ProductForm, RawProductForm
from .models import Product

...

def product_create_view(request):
    #this creates an instance of that form
    my_form = RawProductForm()
    context = {
        'form': my_form
    }
    return render(request, "product/product_create.html", context)

Вот папки enter image description here

Вы импортируете product_create_view из модуля products.views, но в своем forms.py вы не используете эту функцию. Поскольку модуль products.forms импортирует модуль products.views, и наоборот, это создает цикл при импорте одного из них.

Вы можете удалить строку from products.views import product_create_view из файла forms.py и таким образом просто позволить представлению использовать определенные вами формы, а не в обратном направлении.

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