I am using Django 2.2 and have two applications authentication
and multi_users
There is UserSerializer
in authentication
application. The multi_users
model has a field shared_user
and thus using UserSerializer
in the multi_users.serializers
to serialize the shared_user
field.
Now, there is AccessLevelPermissionSerializer
class in the multi_users.serializers
which I need in the authentication.serializers
to serializer permissions
of the user.
This is giving error as
ImportError: cannot import name 'AccessLevelPermissionSerializer' from 'multi_users.serializers' (/app/multi_users/serializers.py)
authentication.serializers
from authentication.models import Profile, User, Preference
class UserBaseSerializer(UserDetailsSerializer):
class Meta(UserDetailsSerializer.Meta):
fields = ('email', 'first_name', 'last_name')
class UserSerializer(UserBaseSerializer):
from multi_users.serializers import AccessLevelPermissionSerializer
permissions = AccessLevelPermissionSerializer(required=False)
class Meta(UserDetailsSerializer.Meta):
fields = UserBaseSerializer.Meta.fields + (
'permissions'
)
multi_users.serializers
from authentication.serializers import UserBaseSerializer
class SharedPermissionSerializer(serializers.ModelSerializer):
class Meta:
model = SharedPermission
fields = [
'code',
'name',
]
class AccessLevelPermissionBaseSerializer(serializers.ModelSerializer):
permission = SharedPermissionSerializer(required=False)
class Meta:
model = AccessLevelPermission
fields = [
'value',
'permission'
]
# Import this in the `authentication.serializers`
class AccessLevelPermissionSerializer(AccessLevelPermissionBaseSerializer):
pass
class MultiUserSerializer(serializers.ModelSerializer):
shared_user = UserBaseSerializer(required=False) # Use from `authentication.serializers`
class Meta:
model = MultiUser
depth = 1
fields = [
'id',
'shared_user',
'access_level',
]
How to resolve this circular import issue?
Hi may be this will help , try to remove from authentication.serializers import UserBaseSerializer
from multi_users.serializers because when you try to access
from multi_users.serializers import AccessLevelPermissionSerializer
permissions = AccessLevelPermissionSerializer(required=False)
this code from authentication.serializers, you being in authentication.serializers try to access from multi_users.serializers import AccessLevelPermissionSerializer
which will redirect your call to multi_users.serializers where you are again importing from authentication.serializers import UserBaseSerializer which making it circular being in that file you again access another file which indirectly calling same file so please try to remove from authentication.serializers import UserBaseSerializer
from multi_users.serializers
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.