导入错误:无法从部分初始化的模块"配置文件.模型"导入名称"配置文件"(很可能是由于循环导入)



我正在将Profile从profiles.models导入meta.models,但显示主题错误。找不到割接解决方案,尽管有类似的问题和不同的解决方案,但在我的情况下不起作用。

这是我的个人资料。型号

from django.db import models
from django.contrib.auth.models import User
from meta.models import Designation
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, help_text = 'Foreign Key From User')
avatar = models.ImageField(upload_to='avatars', default='no_picture.png')
designation = models.ForeignKey(Designation, on_delete = models.CASCADE, null=True)
def __str__(self):
return str(self.user)

这是我的meta.models,我从配置文件导入。models

from django.db import models
from profiles.models import Profile
class Designation(models.Model):
DesignationName  = models.CharField(max_length = 20, blank=True,null= True)
DesignationScale = models.PositiveIntegerField()
def __str__(self):
return str(self.DesignationName)
class DutyPlaceSensitivity(models.Model):
sensitivity = models.CharField(max_length = 12, blank=True, null = True)
def __str__(self):
return str(self.sensitivity)
class DutyPlaces(models.Model):
DutyPlaceName = models.CharField(max_length =20, blank = True, null = True)
sensitivity = models.ForeignKey(DutyPlaceSensitivity, on_delete=models.CASCADE)
class ActingAs(models.Model):
acting_as_title = models.CharField(max_length = 12)
def __str__(self):
return str(self.acting_as_title)
class PlaceOfPosting(models.Model):
UserProfile = models.OneToOneField(Profile, on_delete=models.CASCADE)
acting_as  = models.ForeignKey(ActingAs, on_delete = models.CASCADE)
def __str__(self):
return f"{self.UserProfile} - {self.acting_as}"
class TaskType(models.Model):
taskTypeName = models.CharField(max_length=20)
taskDescription = models.TextField(null = True, blank=True)
def __str__(self):
return str(self.taskTypeName)
class TaskPriority(models.Model):
priority_title = models.CharField(max_length = 12)
def __str__(self):
return str(self.priority_title)
class Tasks(models.Model):
task_name = models.CharField(max_length=120)
task_description = models.TextField()
task_type = models.ForeignKey(TaskType, on_delete=models.CASCADE)
assign_by = models.ManyToManyField(Profile, on_delete = models.CASCADE)
assign_to = models.ManyToManyField(Profile, on_delete = models.CASCADE)
task_priority = models.ForeignKey(TaskPriority, on_delete = models.CASCADE)
#time_stamp  = models.DateField()
created = models.DateTimeField(auto_add_now = True)
updated = models.DateTimeField(auto_add = True)
def __str__(self):
return f"{self.task_name} --{self.assign_by}"

总结问题:

1/为了避免cicular导入,可以使用字符串声明外键目标模型,语法:"应用程序。型号";。

class PlaceOfPosting(models.Model):
UserProfile = models.OneToOneField("profiles.Profile", on_delete=models.CASCADE)

2/On_delete在ManyToManyField上不可用,因为Django将为您处理中间表。

3/当一个模型在同一个第二个模型上有多个FK或M2M时,必须定义related_name(https://docs.djangoproject.com/en/4.1/ref/models/fields/#django.db.models.ForeignKey.related_name)

最新更新