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.

Reply via email to