*更新1:今シリアライザコードDRFシリアライザリレーションズ/ JSON APIフレームワーク
に示す対応するエラーの試み*アップデート2:私は、私は
を使用してい JSON Api frameworkとの競合に問題を狭めてきました私はPythonとDjangoにはかなり新しいです。私はかなりの関係で苦労しています。私はデータベース内の関係を作成することができますが、私は非常に簡単に見えるdocumentationのすべてのメソッドを試しても応答オブジェクトのモデルを一緒にシリアル化することができませんでした。私の目標は、ログイン時にAPIViewから両方のモデルを返すことです。このコードでエラーが発生しない場合は、ユーザーモデルだけで応答が得られます。エラーはさまざまなテクニックに基づいて変化し、リレーションで問題が発生したときに他のユーザーが取得するものと似ていますが、修正によって問題が解決されませんでした。
私が正しいことをしていないことが明らかであるかどうか疑問に思います。もっとコードを分かち合うのはうれしいですが、どうやって進めるのか本当に迷っています。
FYI:FK参照がある理由users.User
私のモデルは、異なるアプリケーションであるあるモデル:
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=50, unique=True)
password = models.CharField(max_length=100)
name = models.CharField(max_length=50)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
has_business = models.BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['password']
def get_full_name(self):
return self.name
def get_short_name(self):
return self.name
def __str__(self):
return self.email
class Business(models.Model):
name = models.CharField(max_length=50, unique=True)
address = models.CharField(max_length=100)
phone = models.CharField(max_length=20)
description = models.CharField(max_length=500)
user = models.ForeignKey(
'users.User',
related_name='business',
unique=False,
on_delete=models.CASCADE
)
has_driver = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
シリアライザ:
class UserSerializer(serializers.ModelSerializer):
token = srs.SerializerMethodField()
biz = BusinessSerializer(many=True, read_only=True,
source='business.id')
error: just returns user model
biz = BusinessSerializer(read_only=True, many=True, source='business')
error: ForeignKey' object has no attribute
biz = serializers.RelatedField(many=True, read_only=True)
error: 'User' object has no attribute 'biz'
biz = serializers.ReadOnlyField(source='businesses.id')
error: RelatedManager object at 0x7fed496fe208> is not JSON
serializable
biz = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
error:'User' object has no attribute 'biz'
class Meta:
model = models.User
fields = ('id', 'email', 'password', 'name', 'token', 'has_business', 'biz')
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
user = models.User(
email = validated_data['email'],
name = validated_data['name'],
phone = validated_data['phone'],
location = validated_data['location'],
)
user.set_password(validated_data['password'])
user.save()
return user
ビュー:
class LoginUser(APIView):
permission_classes = (permissions.AllowAny,)
resource_name = 'users'
def post(self, request):
email = request.POST.get('email', False)
password = request.POST.get('password', False)
if(email and password):
lu = UserAuth()
authenticated_user = lu.auth(email=email, password=password)
if authenticated_user is not None:
if authenticated_user.is_active:
serializer = serializers.UserSerializer(authenticated_user, context={'request': request})
return Response(serializer.data, status=status.HTTP_200_OK)
PIPさて、あなたはここで、これらの2つのモデルに関するいかなるシリアライザコードを持っていない:
ここでは、この日のように安定したバージョンです。あなたが試したこととあなたが得たエラーを示すべきです。 –
あなたの 'UserSerializer'は関係を含んでいません。' biz'フィールドはあなたの 'User'モデルのいずれのフィールドとも関係しません。 –
ありがとうございます。シリアライザコードにエラーのある試行を追加しました。 –