导入Django模型序列化器并在模型的保存方法中使用它

hfsqlsce  于 2023-08-08  发布在  Go
关注(0)|答案(2)|浏览(119)

和平
我得到了
ImportError:无法从“tenant_profile.models”导入名称“Tenant”
我想这是由于循环进口。

# models.py
from .serializers import TenantSerializer

class Tenant(models.Model):

    # model fields

    def save(self, *args, **kwargs):
        _ = super().save(*args, **kwargs)
        data = TenantSerializer(self).data
        # do something        
        return _

# serializers.py
from .models import Tenant

class TenantSerializer(serializers.ModelSerializer):    

    class Meta:
        model = Tenant
        fields = '__all__'

字符串
一个Pythonic的方法来修复将是非常感谢的。

7d7tgy0s

7d7tgy0s1#

导入方法中的序列化程序:

# models.py
# no from .serializers import TenantSerializer

class Tenant(models.Model):

    # model fields

    def save(self, *args, **kwargs):
        from .serializers import TenantSerializer

        _ = super().save(*args, **kwargs)
        data = TenantSerializer(self).data
        # do something
        return _

# serializers.py
from .models import Tenant

class TenantSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tenant
        fields = '__all__'

字符串

axr492tv

axr492tv2#

在“models.py“和“serializers.py“之间循环导入所导致的错误,当两个或多个模块尝试相互导入时会发生这种情况。
在本例中,models.py正在从serializers.py导入TenantSerializer,serializers.py正在从“models.py”导入“Tenant”
要解决这个问题,您可以在model.py的保存函数中导入TenantSerializer:

from .serializers import TenantSerializer

class Tenant(models.Model):

    # model fields

    def save(self, *args, **kwargs):
        from .serializers import TenantSerializer  # Move import inside the function
        _ = super().save(*args, **kwargs)
        data = TenantSerializer(self).data
        # do something        
        return _

字符串
我希望这对你有帮助。

相关问题