Skip to content

Writable nested serializer error with UniqueTogetherValidator #2380

Closed
@hiepthai

Description

@hiepthai

Encountered this strange error, any idea what i'm missing?
Django Version: 1.7
Python Version: 2.7.3
DRF: 3.0.2

# Model
class Pin(BaseModel):
    user = models.ForeignKey(User)
    item = models.ForeignKey(Photo)
    board = models.ForeignKey(Board)

    class Meta:
        unique_together = ('item', 'board')

# Serializer
class PinSerializer(serializers.ModelSerializer):
    user = UserSerializer(read_only=True)
    board = BoardSerializer()

    class Meta:
        model = Pin
        fields = ('id', 'user', 'item', 'board')

    def create(self, validated_data):
        board_data = validated_data.pop('board')
        board_name = board_data.get('name', 'My favorites')
        user = validated_data.get('user', None)
        board, created = Board.objects.get_or_create(name=board_name, user=user)
        return Pin.objects.create(board=board, **validated_data)

Traceback:
File "/home/django/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response

  1.                 response = wrapped_callback(request, _callback_args, *_callback_kwargs)
    
    File "/home/django/local/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
  2.     return view_func(_args, *_kwargs)
    
    File "/home/django/local/lib/python2.7/site-packages/rest_framework/viewsets.py" in view
  3.         return self.dispatch(request, _args, *_kwargs)
    
    File "/home/django/local/lib/python2.7/site-packages/rest_framework/views.py" in dispatch
  4.         response = self.handle_exception(exc)
    
    File "/home/django/local/lib/python2.7/site-packages/rest_framework/views.py" in dispatch
  5.         response = handler(request, _args, *_kwargs)
    
    File "/home/django/local/lib/python2.7/site-packages/rest_framework/mixins.py" in create
  6.     serializer.is_valid(raise_exception=True)
    
    File "/home/django/local/lib/python2.7/site-packages/rest_framework/serializers.py" in is_valid
  7.             self._validated_data = self.run_validation(self.initial_data)
    
    File "/home/django/local/lib/python2.7/site-packages/rest_framework/serializers.py" in run_validation
  8.         self.run_validators(value)
    
    File "/home/django/local/lib/python2.7/site-packages/rest_framework/fields.py" in run_validators
  9.             validator(value)
    
    File "/home/django/local/lib/python2.7/site-packages/rest_framework/validators.py" in call
  10.     queryset = self.filter_queryset(attrs, queryset)
    
    File "/home/django/local/lib/python2.7/site-packages/rest_framework/validators.py" in filter_queryset
  11.     return queryset.filter(**filter_kwargs)
    
    File "/home/django/local/lib/python2.7/site-packages/django/db/models/manager.py" in manager_method
  12.             return getattr(self.get_queryset(), name)(_args, *_kwargs)
    
    File "/home/django/local/lib/python2.7/site-packages/django/db/models/query.py" in filter
  13.     return self._filter_or_exclude(False, _args, *_kwargs)
    
    File "/home/django/local/lib/python2.7/site-packages/django/db/models/query.py" in _filter_or_exclude
  14.         clone.query.add_q(Q(_args, *_kwargs))
    
    File "/home/django/local/lib/python2.7/site-packages/django/db/models/sql/query.py" in add_q
  15.     clause, require_inner = self._add_q(where_part, self.used_aliases)
    
    File "/home/django/local/lib/python2.7/site-packages/django/db/models/sql/query.py" in _add_q
  16.                 current_negated=current_negated, connector=connector)
    
    File "/home/django/local/lib/python2.7/site-packages/django/db/models/sql/query.py" in build_filter
  17.                                                 lookups, value)
    
    File "/home/django/local/lib/python2.7/site-packages/django/db/models/fields/related.py" in get_lookup_constraint
  18.                 lookup_class(Col(alias, target, source), val), AND)
    
    File "/home/django/local/lib/python2.7/site-packages/django/db/models/lookups.py" in init
  19.     self.rhs = self.get_prep_lookup()
    
    File "/home/django/local/lib/python2.7/site-packages/django/db/models/lookups.py" in get_prep_lookup
  20.     return self.lhs.output_field.get_prep_lookup(self.lookup_name, self.rhs)
    
    File "/home/django/local/lib/python2.7/site-packages/django/db/models/fields/init.py" in get_prep_lookup
  21.         return self.get_prep_value(value)
    
    File "/home/django/local/lib/python2.7/site-packages/django/db/models/fields/init.py" in get_prep_value
  22.     return int(value)
    

Exception Type: TypeError at /api/v1/pin/
Exception Value: int() argument must be a string or a number, not 'OrderedDict'

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions