I'm trying to find a way of checking whether given object ID in IntegerField
exists (which is used for generic relation in serializer), like there is
for PrimaryKeyRelatedField.
So far, I came with this approach:
*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}}
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
But this isn't a robust way of doing such, because it actually doesn't
raise a field error - it just imitates it and therefore in API Viewer the
field isn't highlighted. I wonder if there's some better solution for this?
Thanks in advance!
P.S. This is how it looks like after submitting the form (click on the
image to enlarge):
<http://i.stack.imgur.com/vMykd.png>
--
You received this message because you are subscribed to the Google Groups
"Django REST framework" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.