POSTリクエストを通じてJSONを送信できるAPIを作成したいとします。 JSONはシリアライザに渡されます。このシリアライザは、新しいオブジェクトの作成と既存のデータの作成に使用されます。Django RESTフレームワーク - OneToOneとJSONの関係
ユーザー名などの基本的な文字のみの入力などの「シンプルな」ケースではうまく動作しますが、OneToOne関係を作成するには真剣に取り残されています。ここにサンプルコードがあります。
-data['account']
にemployee_list
という名前のファンクションが有効なユーザ名である場合、User
インスタンスが正常に選択されています。
data = JSONParser().parse(request)
user_object = User.objects.get(username=data['account'])
data['account'] = user_object # this is now a valid User object
serializer = EmployeeSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
モデル
class Employee(models.Model)
id = models.AutoField(primary_key=True)
name = models.CharField(...)
surname = models.CharField...
account = models.OneToOneField(User)
role = ...
salary = ...
picture = ...
そして
class EmployeeSerializer(serializers.ModelSerializer):
class Meta:
model = Employee
fields = (...) # all fields of the `Employee` model
は、これまでのところは良い、しかし、シリアライザは検証しませんシリアライザ! OneToOneリレーションの必要性を取り除くと、それは機能します。
ユーザーオブジェクトに対して正常なOneToOne関係で新しいEmployeeオブジェクトを作成するにはどうすればよいですか?
ありがとうございます。
検証エラーとは何ですか?内部でraise_exceptionを渡すことができます:is_valid(raise_exception = True) – arjun27
チップのおかげで、これが可能であったことさえ知りませんでした。それは私に正確なエラーを与えた、私はこれのためにそれを単独で解決することができた。どうもありがとうございます! – fweidemann14