我正在将Django和Django Rest Framework用于序列化程序。
我有以下情况。
在文件models.py
中:
from django.db.models import Manager, Model, CharField
from .serializers import MyModelSerializer
class MyModelManager(Manager):
serializer_class = MyModelSerializer
class MyModel(Model):
name = CharField(max_length=64)
objects = MyModelManager()
在文件serializers.py
中:
from rest_framework.serializers import ModelSerializer
from models import MyModel
class MyModelSerializer(ModelSerializer):
class Meta:
model = MyModel
fields = ('name',)
但是,这会导致导入周期,因为两个文件都试图互相导入。我可以通过本地导入来防止这种情况:
class MyModelManager(Manager):
@property
def serializer_class(self):
from ow_articlecode.import_cycle_serializers import MyModelSerializer
return MyModelSerializer
但是,这感觉像是黑客。什么是打破此导入周期的合适解决方案?
答案 0 :(得分:0)
一个Manager
[Django-doc],具有 no serializer_class
字段。实际上,经理对序列化一无所知。管理器用于过滤,创建等对象。
您的models.py
应该如下所示:
# app/models.py
from django.db.models import Manager, Model, CharField
class MyModelManager(Manager):
# no serializer_class
pass
class MyModel(Model):
name = CharField(max_length=64)
Model
的想法是,它定义了您的业务逻辑,而不是序列化,表单,视图,模板逻辑。