Reputation: 501
I have a file in django project models.py:
from django.db import models
class Product(models.Model):
id = models.IntegerField(unique=True,primary_key=True)
title = models.CharField(max_length=200)
description = models.TextField(max_length= 100000)
price = models.FloatField()
count = models.IntegerField(default=1)
file_content = models.ManyToManyField(ProductImage, related_name='file_content', blank=True, null=True)
offer= models.BooleanField(default=False)
def __str__(self):
return self.title
class ProductImage(models.Model):
property_id = models.ForeignKey(Product,on_delete=models.CASCADE)
image = models.FileField(upload_to='pics')
def __str__(self):
return '%s-image' % (self.property_id.title)
It says that ProductImage
is not defined, which is clear because it is defined below. If I tries to move it up above like this:
class ProductImage(models.Model):
property_id = models.ForeignKey(Product,on_delete=models.CASCADE)
image = models.FileField(upload_to='pics')
def __str__(self):
return '%s-image' % (self.property_id.title)
class Product(models.Model):
id = models.IntegerField(unique=True,primary_key=True)
title = models.CharField(max_length=200)
description = models.TextField(max_length= 100000)
price = models.FloatField()
count = models.IntegerField(default=1)
file_content = models.ManyToManyField(ProductImage, related_name='file_content', blank=True, null=True)
offer= models.BooleanField(default=False)
def __str__(self):
return self.title
Now it says Product
is not defined . Can any body tell me the remedy?
What I have done so far?
I tried to make a separate file called img.py and class ProductImage
wrote there.Then I tried to import it here. Now it says:
Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
File "c:\users\hussnain\appdata\local\programs\python\python39\lib\threading.py", line 954, in _bootstrap_inner
self.run()
File "c:\users\hussnain\appdata\local\programs\python\python39\lib\threading.py", line 892, in run
self._target(*self._args, **self._kwargs)
File "E:\UsamaComputer\env\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper
fn(*args, **kwargs)
File "E:\UsamaComputer\env\lib\site-packages\django\core\management\commands\runserver.py", line 110, in inner_run
autoreload.raise_last_exception()
File "E:\UsamaComputer\env\lib\site-packages\django\utils\autoreload.py", line 87, in raise_last_exception
raise _exception[1]
File "E:\UsamaComputer\env\lib\site-packages\django\core\management\__init__.py", line 375, in execute
autoreload.check_errors(django.setup)()
File "E:\UsamaComputer\env\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper
fn(*args, **kwargs)
File "E:\UsamaComputer\env\lib\site-packages\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "E:\UsamaComputer\env\lib\site-packages\django\apps\registry.py", line 114, in populate
app_config.import_models()
File "E:\UsamaComputer\env\lib\site-packages\django\apps\config.py", line 301, in import_models
self.models_module = import_module(models_module_name)
File "c:\users\hussnain\appdata\local\programs\python\python39\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 790, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "E:\UsamaComputer\backend\frontend\models.py", line 2, in <module>
from .img import ProductImage
File "E:\UsamaComputer\backend\frontend\img.py", line 2, in <module>
from .models import Product
ImportError: cannot import name 'Product' from partially initialized module 'frontend.models' (most likely due to a circular import) (E:\UsamaComputer\backend\frontend\models.py)
means I cannot fool him by making a circular import. can You people help me? One thank for reading and next is for solving it.
Upvotes: 2
Views: 1122
Reputation: 1062
Try to do like that
class Product(models.Model):
id = models.IntegerField(unique=True,primary_key=True)
title = models.CharField(max_length=200)
description = models.TextField(max_length= 100000)
price = models.FloatField()
count = models.IntegerField(default=1)
file_content = models.ManyToManyField("ProductImage", related_name='file_content', blank=True, null=True)
offer= models.BooleanField(default=False)
def __str__(self):
return self.title
class ProductImage(models.Model):
property_id = models.ForeignKey("Product",on_delete=models.CASCADE)
image = models.FileField(upload_to='pics')
Upvotes: 4