Using default user and Model with FileField

242 views
Skip to first unread message

Cody Scott

unread,
May 15, 2015, 12:51:09 PM5/15/15
to django-res...@googlegroups.com
I'm using a ModelViewSet with a Model that has a FileField.

When I try to create a model object without the optional file I get the error that
ValueError: Cannot assign "<User: one>": "Page.user" must be a "User" instance.

RROR: test_create_page_endpoint (api.tests.test_pages.PageTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/siecje/Desktop/agora/api/tests/test_pages.py", line 26, in test_create_page_endpoint response = self.client.post(url, data) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/rest_framework/test.py", line 168, in post path, data=data, format=format, content_type=content_type, **extra) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/rest_framework/test.py", line 90, in post return self.generic('POST', path, data, content_type, **extra) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/rest_framework/compat.py", line 222, in generic return self.request(**r) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/rest_framework/test.py", line 157, in request return super(APIClient, self).request(**kwargs) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/rest_framework/test.py", line 109, in request request = super(APIRequestFactory, self).request(**kwargs) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/django/test/client.py", line 466, in request six.reraise(*exc_info) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 132, in get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view return view_func(*args, **kwargs) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/rest_framework/viewsets.py", line 85, in view return self.dispatch(request, *args, **kwargs) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/rest_framework/views.py", line 451, in dispatch response = self.handle_exception(exc) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/rest_framework/views.py", line 448, in dispatch response = handler(request, *args, **kwargs) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/rest_framework/mixins.py", line 20, in create self.perform_create(serializer) File "/home/siecje/Desktop/agora/api/views.py", line 29, in perform_create serializer.save(stylesheet=self.request.data.get('stylesheet')) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/rest_framework/serializers.py", line 165, in save self.instance = self.create(validated_data) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/rest_framework/serializers.py", line 775, in create instance = ModelClass.objects.create(**validated_data) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/django/db/models/manager.py", line 127, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/django/db/models/query.py", line 346, in create obj = self.model(**kwargs) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/django/db/models/base.py", line 468, in __init__ setattr(self, field.name, rel_obj) File "/home/siecje/Desktop/agora/venv/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 627, in __set__ self.field.rel.to._meta.object_name, ValueError: Cannot assign "<User: one>": "Page.user" must be a "User" instance. class PageTests(APITestCase): def setUp(self): self.user = User.objects.create_user( username='one', email='o...@example.com', password='one') token = Token.objects.get(user__username=self.user.username) self.client.credentials(HTTP_AUTHORIZATION='Token ' + token.key) def test_create_page_endpoint(self): url = reverse('page-list') data = { 'name': 'Endpoint Works', } response = self.client.post(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(response.data['name'], 'Endpoint Works') class PageSerializer(serializers.ModelSerializer): user = serializers.HiddenField( default=serializers.CurrentUserDefault() ) class Meta: model = Page fields = ('id', 'name', 'stylesheet', 'user', 'created', 'updated') class User(AuthUser): class Meta: proxy = True class Common(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) class Meta: abstract = True class Page(Common): name = models.TextField() stylesheet = models.FileField(null=True, blank=True) user = models.ForeignKey(User, related_name='pages') def __str__(self): return self.name class PageViewSet(viewsets.ModelViewSet): lookup_field = 'id' parser_classes = (MultiPartParser, FormParser,) permission_classes = (permissions.IsAuthenticatedOrReadOnly,) queryset = Page.objects.all() serializer_class = PageSerializer def perform_create(self, serializer): serializer.save(stylesheet=self.request.data.get('stylesheet')) page_list = views.PageViewSet.as_view({ 'get': 'list', 'post': 'create' }) page_detail = views.PageViewSet.as_view({ 'get': 'retrieve', 'put': 'update', 'patch': 'partial_update', 'delete': 'destroy' }) url(r'^pages/?$', page_list, name='page-list'), url(r'^pages/(?P<id>[^/]+)/?$', page_detail, name='page-detail'),

Vinaya Bharathi Mohandoss

unread,
Jun 20, 2015, 7:15:40 PM6/20/15
to django-res...@googlegroups.com
Hi
did you get a solution to this issue? I am facing the same problem now actually.. 

Thanks
Vinaya

Cody Scott

unread,
Jun 21, 2015, 3:48:47 PM6/21/15
to django-res...@googlegroups.com
I was using a proxy model for User and using that for the foreign key fields.

https://github.com/Siecje/debt/commit/cffd5ac72d75a5400a57e5688de0861ccc2dacda

--
You received this message because you are subscribed to a topic in the Google Groups "Django REST framework" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/django-rest-framework/A2xsjLxL_NA/unsubscribe.
To unsubscribe from this group and all its topics, send an email to django-rest-fram...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages