我有两个模型Stage和Application。我收到类似这样的错误:嵌套序列化器Django Rest框架
异常类型:导入错误
异常值:不能导入名称ApplicationSerializer
异常位置:/用户/ jojjen /工作区/ indusaction/VMS /分期/串行.py in,第7行
我在猜测这个错误是由于序列化程序中的循环导入引起的。但我不知道如何解决这个问题。
如果我从删除ApplicationSerializer进口StageSerializer,它的工作原理。但是我需要在我构建的模板中访问舞台应用程序的某些属性。
以下是代码:
阶段/ models.py:
from django.db import models
from core.models import TimeStampedModel
from applications.models import Application
from authentication.models import Account
class Stage(TimeStampedModel):
name = models.CharField(max_length=20)
application = models.ForeignKey(Application, null=True, related_name='stages')
assignee = models.ForeignKey(Account, null=True)
def __unicode__(self):
return self.name
应用/ models.py:
from django.db import models
from core.models import TimeStampedModel
from organizations.models import Organization
from authentication.models import Account
class Application(TimeStampedModel):
title = models.CharField(max_length=30, unique=True)
details = models.TextField()
archived = models.BooleanField(default=False)
organization = models.ForeignKey(Organization, null=True)
users = models.ManyToManyField(Account, related_name='applications')
creator = models.ForeignKey(Account, null=True)
def __unicode__(self):
return self.title
阶段/ serializers.py
from rest_framework import serializers
from stages.models import Stage
from authentication.serializers import AccountSerializer
from applications.serializers import ApplicationSerializer
class StageSerializer(serializers.ModelSerializer):
assignee = AccountSerializer(read_only=True, required=False)
application = ApplicationSerializer(read_only=True, required=False)
class Meta:
model = Stage
fields = ('id', 'name', 'assignee', 'created_at', 'updated_at',
'application',)
read_only_fields = ('created_at', 'updated_at', 'assignee',
'application',)
def get_validation_exclusions(self, *args, **kwargs):
exclusions = super(StageSerializer,
self).get_validation_exclusions()
return exclusions + ['assignee', 'application']
applications/serializers.py:
from rest_framework import serializers
from applications.models import Application
from organizations.serializers import OrganizationSerializer
from authentication.serializers import AccountSerializer
from stages.serializers import StageSerializer
from applicants.serializers import ApplicantSerializer
class ApplicationSerializer(serializers.ModelSerializer):
organization = OrganizationSerializer(read_only=True, required=False)
creator = AccountSerializer(read_only=True, required=False)
users = AccountSerializer(read_only=True, required=False, many=True)
stages = StageSerializer(read_only=True, required=False, many=True)
applicant_set = ApplicantSerializer(read_only=True, required=False, many=True)
class Meta:
model = Application
fields = ('id', 'title', 'details', 'organization', 'stages',
'creator', 'archived', 'users', 'applicant_set')
read_only_fields = ('id', 'organization', 'users', 'applicant_set',
'created_at', 'updated_at', 'stages')
def get_validation_exclusions(self, *args, **kwargs):
exclusions = super(ApplicatiionSerializer,
self).get_validation_exclusions()
return exclusions + ['organization', 'users', 'creator', 'stage_set', 'applicant_set']
我改变了我的设计,以消除循环依赖:) – Jojjen