djangoにはselect_relatedとprefetch_relatedがあり、データベースから項目をクエリしてパフォーマンスを向上させるときに使用でき、django restフレームのネストされたシリアライザとペアで使用できます。django rest framework:シリアライザで初期データをプリフェッチ
私は例えば、私のモデル を作成するために、シリアライザを使用する場合ただし、問題が来る:
要求:たとえば
class CompanySerializer(serializer.serializers):
employee_set = serializers.JSONField()
class Meta:
model = Company
fields = ('id', 'employee_set')
def create(self, validated_data):
employee_set = validated_data.pop('employee_set')
for employee in employee_set:
serializer = EmployeeSerializer(data=employee)
serializer.is_valid(raise_exception=True)
serializer.save()
class EmployeeSerializer(serializer.serializers):
card = serializers.PrimaryKeyRelatedField(queryset=Card.objects.all())
class Meta:
model = Employee
fields = ('id', 'name', 'card')
def validate(self, obj):
if card.employee_set.all().count() > 3:
raise serializers.ValidationError({'_error': 'invalid})
return data
を、私は次のように複数の従業員を持つ企業を作成したいです.POST:
{
employee_set: [
{ name: 'tim', card: 1 },
{ name: 'bob', card: 1 },
{ name: 'jimmy', card: 2},
]
}
次に、CompanySerializer(request.POST)を使用できますか?
ただし、このシリアライザを保存すると、EmployeeSerializerは各従業員を繰り返し処理し、employee.card_setを照会するため、多くのSQL問合せが発生します。 prefetch_relatedのようなやり方はありますか?
おかげ