IntegerField
의 주어진 객체 ID가 존재하는지 확인하는 방법을 찾고 있습니다 (직렬 기의 일반 관계에 사용됨). PrimaryKeyRelatedField
.일반 외래 키가있는 DRF 시리얼 라이저 - 저장하기 전에 주어진 객체 ID가 있는지 확인하십시오.
지금까지, 나는이 방법과 함께 :
models.py :
class Comment(models.Model):
person = models.ForeignKey(User, on_delete=models.CASCADE)
text = models.TextField()
created = models.DateTimeField(auto_now_add=True)
content_type = models.ForeignKey(ContentType, limit_choices_to={'pk__in': CONTENT_TYPES_PK})
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
serializers.py :
class CommentSerializer(serializers.ModelSerializer):
person = UserSerializer(read_only=True, default=serializers.CurrentUserDefault())
content_type = serializer.PrimaryKeyRelatedField(queryset=ContentType.objects.filter(pk__in=CONTENT_TYPES_PK), write_only=True)
object_id = IntegerField(write_only=True)
class Meta:
model = Comment
extra_kwargs = {'created': {'read_only': True}}
exclude = ('content_object',)
def create(self, validated_data):
obj = Comment(**validated_data)
if not obj.content_object:
raise serializers.ValidationError({'object_id': ['Invalid pk "'+str(obj.object_id)+'" - object does not exist.']})
obj.save()
return obj
하지만이 같은 일을 강력한 방법이 아닌, 때문에 실제로 필드 오류를 발생시키지 않습니다. API를 모방하므로 필드가 강조 표시되지 않습니다. 이것에 대한 더 나은 해결책이 있는지 궁금합니다. 미리 감사드립니다!