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)
Вы импортируете product_create_view
из модуля products.views
, но в своем forms.py
вы не используете эту функцию. Поскольку модуль products.forms
импортирует модуль products.views
, и наоборот, это создает цикл при импорте одного из них.
Вы можете удалить строку from products.views import product_create_view
из файла forms.py
и таким образом просто позволить представлению использовать определенные вами формы, а не в обратном направлении.