如何在Python同一文件中导入类到其他类中

1 投票
2 回答
830 浏览
提问于 2025-04-15 22:54

我有一个文件,下面是它的内容,这个文件是一个叫做 projectmanager 的 Django 项目的一部分,文件路径是 projectmanager/projects/models.py。每当我使用 Python 解释器导入一个 Project 来测试功能时,我都会在第 8 行遇到一个名称错误,提示找不到 FileRepo()。我该如何正确导入这些类呢?理想情况下,我希望每个 Project 能包含多个 FileRepo,而每个 FileRepo 又能包含不确定数量的文件。谢谢大家的帮助!

#imports
from django.db import models
from django.contrib import admin
#Project is responsible for ensuring that each project contains all of the folders and file storage
#mechanisms a project needs, as well as a unique CCL#
class Project(models.Model):
    ccl = models.CharField(max_length=30)
    Techpacks = FileRepo()
    COAS = FileRepo()
    Shippingdocs = FileRepo()
    POchemspecs = FileRepo()
    Internalpos = FileRepo()
    Finalreports = FileRepo()
    Batchrecords = FileRepo()
    RFPS = FileRepo()
    Businessdev = FileRepo()
    QA = FileRepo()
    Updates = FileRepo()

    def __unicode__(self):
        return self.ccl

#ProjectFile is the file object used by each FileRepo component
class ProjectFile(models.Model):
    file = models.FileField(uploadto='ProjectFiles')

    def __unicode__(self):
        return self.file

#FileRepo is the model for the "folders" to be used in a Project
class FileRepo(models.Model):
    typeOf = models.CharField(max_length=30)
    files = models.ManyToManyField(ProjectFile)

    def __unicode__(self):
            return self.typeOf

2 个回答

0

你在调用 FileRepo 之前,有没有先声明它?也就是说,是否把 FileRepo 这个类放在了 models.py 文件中,放在 Project 这个类的前面?

3

虽然McPeterson说得对,一般来说,一个名字要被找到,必须在使用它的地方之前定义,但在你的情况下,这个方法并不管用。在Django中,你不能随便把一个类当作另一个类的属性。你需要定义它们之间的正确关系。我建议你去看看关于关系字段的文档

撰写回答