umutbozkurt/django-rest-framework-mongoengine

Cannot have ReferenceField unique

Vayel opened this issue · 2 comments

Vayel commented

I have this simple model:

class Model(Document):
    ref = ReferenceField('Referenced', unique=True,)

When I create a basic serializer and a basic viewset for this model, I obtain an error when I request the endpoint (/models/):

Traceback (most recent call last):
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/django/core/handlers/base.py", line 217, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/django/core/handlers/base.py", line 215, in _get_response
    response = response.render()
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/django/template/response.py", line 107, in render
    self.content = self.rendered_content
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework/response.py", line 72, in rendered_content
    ret = renderer.render(self.data, accepted_media_type, context)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework/renderers.py", line 703, in render
    context = self.get_context(data, accepted_media_type, renderer_context)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework/renderers.py", line 636, in get_context
    raw_data_post_form = self.get_raw_data_form(data, view, 'POST', request)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework/renderers.py", line 559, in get_raw_data_form
    content = renderer.render(serializer.data, accepted, context)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework/serializers.py", line 534, in data
    ret = super(Serializer, self).data
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework/serializers.py", line 267, in data
    self._data = self.get_initial()
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework/serializers.py", line 411, in get_initial
    for field in self.fields.values()
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework/serializers.py", line 364, in fields
    for key, value in self.get_fields().items():
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework_mongoengine/serializers.py", line 324, in get_fields
    field_name, self.field_info, model, depth, depth_embedding
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework_mongoengine/serializers.py", line 373, in build_field
    return self.build_reference_field(field_name, relation_info, nested_depth)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework_mongoengine/serializers.py", line 469, in build_reference_field
    field_kwargs = get_relation_kwargs(field_name, relation_info)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework_mongoengine/utils.py", line 213, in get_relation_kwargs
    validator = UniqueValidator(queryset=model_field.model.objects)
AttributeError: 'ReferenceField' object has no attribute 'model'

define the unique index in meta.

Vayel commented

Indeed, it works.