DRF: Cannot POST or create a new object through admin interface
I am getting the following error when I try to create a new object through the admin interface:
TypeError: unsupported operand type(s) for %: 'ImproperlyConfigured' and 'tuple'
I have the following models:
class CustomUser(AbstractUser):
def __str__(self):
return self.email
class Meta:
ordering = ('id',)
verbose_name = 'user'
class Address(models.Model):
"""Address contains information about location. Address can be own by any
kind of model."""
content_type = models.ForeignKey(
ContentType, on_delete=models.CASCADE, null=True
)
object_id = models.PositiveIntegerField(null=True)
owner = GenericForeignKey("content_type", "object_id")
CATEGORIES = Choices('billing', 'shipping')
category = models.CharField(choices=CATEGORIES, max_length=16)
address_1 = models.CharField("address line 1", max_length=128)
address_2 = models.CharField("address line 2", max_length=128, blank=True)
city = models.CharField(max_length=64)
state_province = models.CharField('state/province', max_length=128)
country = CountryField(blank_label='(select country)')
zip_code = models.CharField(max_length=10)
def __str__(self):
return (
f'{self.address_1}, {self.city}, {self.state_province}, '
f'{self.country.name}, {self.zip_code}'
)
class Meta:
ordering = ('id',)
class Company(Group):
"""An abstract base class that inherits Group."""
addresses = GenericRelation(Address)
owner = models.ForeignKey(User,
on_delete=models.CASCADE,
related_name='%(class)ss',
related_query_name='%(class)s')
logo = CloudinaryField('image',
default='your_logo_here',
null=True,
blank=True)
description = models.TextField('description', max_length=3000, blank=True)
facebook_url = models.URLField('facebook url', blank=True)
twitter_url = models.URLField('twitter url', blank=True)
instagram_url = models.URLField('instagram url', blank=True)
pinterest_url = models.URLField('pinterest url', blank=True)
portfolio_url = models.URLField('portfolio url', blank=True)
phone_number = PhoneNumberField('phone number', blank=True)
class Meta:
abstract = True
ordering = ('id',)
class Brand(Company):
"""A Brand can have multiple members."""
These are my serializers:
class CustomUserSerializer(HyperlinkedModelSerializer):
brands = HyperlinkedRelatedField(
many=True,
read_only=True,
view_name='brand-detail'
)
class Meta:
model = CustomUser
fields = (
'url',
'username',
'email',
'brands',
)
class AddressSerializer(HyperlinkedModelSerializer):
owner = GenericRelatedField({
Brand: HyperlinkedRelatedField(
queryset=Brand.objects.all(),
view_name='brand-detail',
)
})
class Meta:
model = Address
fields = (
'url',
'category',
'address_1',
'address_2',
'city',
'state_province',
'country',
'zip_code',
'owner',
)
class BrandSerializer(HyperlinkedModelSerializer):
addresses = HyperlinkedRelatedField(many=True,
read_only=True,
view_name='address-detail')
class Meta:
model = Brand
fields = (
'url',
'owner',
'logo',
'description',
'facebook_url',
'twitter_url',
'instagram_url',
'pinterest_url',
'portfolio_url',
'phone_number',
'addresses',
)
This is how I configured the urls:
router = DefaultRouter()
router.register('users', CustomUserViewSet)
router.register('addresses', AddressViewSet)
router.register('brands', BrandViewSet)
urlpatterns = [
path('', include(router.urls)),
path('auth/', include('rest_framework.urls', namespace='rest_framework')),
]
I can access http://localhost:8000/api/addresses/
, and I have the following form:
The problem is when I try to POST to create a new object. I am getting that error I have described, and it seems because I am not passing properly the owner (actually I have no idea how to pass an object here, should I use a JSON or how).
Questions:
How can I solve this error because I am also trying to test the POST method, and it was when I realized this was not working?
Is there any way to include the fields of a
GenericForeignKey
in that form?
This is my traceback:
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/generic_relations/serializers.py" in to_internal_value
39. serializer = self.get_deserializer_for_data(data)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/generic_relations/serializers.py" in get_deserializer_for_data
75. 'Could not determine a valid serializer for value %r.' % value)
During handling of the above exception (Could not determine a valid serializer for value ''.), another exception occurred:
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/serializers.py" in to_internal_value
488. validated_value = field.run_validation(primitive_value)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/fields.py" in run_validation
536. value = self.to_internal_value(data)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/generic_relations/serializers.py" in to_internal_value
41. raise ValidationError(e)
During handling of the above exception (["Could not determine a valid serializer for value ''."]), another exception occurred:
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/fields.py" in get_error_detail
240. error_dict = exc_info.error_dict
During handling of the above exception ('ValidationError' object has no attribute 'error_dict'), another exception occurred:
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
126. response = self.process_exception_by_middleware(e, request)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
124. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
54. return view_func(*args, **kwargs)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/viewsets.py" in view
116. return self.dispatch(request, *args, **kwargs)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/views.py" in dispatch
495. response = self.handle_exception(exc)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/views.py" in handle_exception
455. self.raise_uncaught_exception(exc)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/views.py" in dispatch
492. response = handler(request, *args, **kwargs)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/mixins.py" in create
20. serializer.is_valid(raise_exception=True)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/serializers.py" in is_valid
236. self._validated_data = self.run_validation(self.initial_data)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/serializers.py" in run_validation
434. value = self.to_internal_value(data)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/serializers.py" in to_internal_value
494. errors[field.field_name] = get_error_detail(exc)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/fields.py" in get_error_detail
245. for error in exc_info.error_list]
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/fields.py" in <listcomp>
245. for error in exc_info.error_list]
Exception Type: TypeError at /api/addresses/
Exception Value: unsupported operand type(s) for %: 'ImproperlyConfigured' and 'tuple'
python django django-rest-framework
|
show 3 more comments
I am getting the following error when I try to create a new object through the admin interface:
TypeError: unsupported operand type(s) for %: 'ImproperlyConfigured' and 'tuple'
I have the following models:
class CustomUser(AbstractUser):
def __str__(self):
return self.email
class Meta:
ordering = ('id',)
verbose_name = 'user'
class Address(models.Model):
"""Address contains information about location. Address can be own by any
kind of model."""
content_type = models.ForeignKey(
ContentType, on_delete=models.CASCADE, null=True
)
object_id = models.PositiveIntegerField(null=True)
owner = GenericForeignKey("content_type", "object_id")
CATEGORIES = Choices('billing', 'shipping')
category = models.CharField(choices=CATEGORIES, max_length=16)
address_1 = models.CharField("address line 1", max_length=128)
address_2 = models.CharField("address line 2", max_length=128, blank=True)
city = models.CharField(max_length=64)
state_province = models.CharField('state/province', max_length=128)
country = CountryField(blank_label='(select country)')
zip_code = models.CharField(max_length=10)
def __str__(self):
return (
f'{self.address_1}, {self.city}, {self.state_province}, '
f'{self.country.name}, {self.zip_code}'
)
class Meta:
ordering = ('id',)
class Company(Group):
"""An abstract base class that inherits Group."""
addresses = GenericRelation(Address)
owner = models.ForeignKey(User,
on_delete=models.CASCADE,
related_name='%(class)ss',
related_query_name='%(class)s')
logo = CloudinaryField('image',
default='your_logo_here',
null=True,
blank=True)
description = models.TextField('description', max_length=3000, blank=True)
facebook_url = models.URLField('facebook url', blank=True)
twitter_url = models.URLField('twitter url', blank=True)
instagram_url = models.URLField('instagram url', blank=True)
pinterest_url = models.URLField('pinterest url', blank=True)
portfolio_url = models.URLField('portfolio url', blank=True)
phone_number = PhoneNumberField('phone number', blank=True)
class Meta:
abstract = True
ordering = ('id',)
class Brand(Company):
"""A Brand can have multiple members."""
These are my serializers:
class CustomUserSerializer(HyperlinkedModelSerializer):
brands = HyperlinkedRelatedField(
many=True,
read_only=True,
view_name='brand-detail'
)
class Meta:
model = CustomUser
fields = (
'url',
'username',
'email',
'brands',
)
class AddressSerializer(HyperlinkedModelSerializer):
owner = GenericRelatedField({
Brand: HyperlinkedRelatedField(
queryset=Brand.objects.all(),
view_name='brand-detail',
)
})
class Meta:
model = Address
fields = (
'url',
'category',
'address_1',
'address_2',
'city',
'state_province',
'country',
'zip_code',
'owner',
)
class BrandSerializer(HyperlinkedModelSerializer):
addresses = HyperlinkedRelatedField(many=True,
read_only=True,
view_name='address-detail')
class Meta:
model = Brand
fields = (
'url',
'owner',
'logo',
'description',
'facebook_url',
'twitter_url',
'instagram_url',
'pinterest_url',
'portfolio_url',
'phone_number',
'addresses',
)
This is how I configured the urls:
router = DefaultRouter()
router.register('users', CustomUserViewSet)
router.register('addresses', AddressViewSet)
router.register('brands', BrandViewSet)
urlpatterns = [
path('', include(router.urls)),
path('auth/', include('rest_framework.urls', namespace='rest_framework')),
]
I can access http://localhost:8000/api/addresses/
, and I have the following form:
The problem is when I try to POST to create a new object. I am getting that error I have described, and it seems because I am not passing properly the owner (actually I have no idea how to pass an object here, should I use a JSON or how).
Questions:
How can I solve this error because I am also trying to test the POST method, and it was when I realized this was not working?
Is there any way to include the fields of a
GenericForeignKey
in that form?
This is my traceback:
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/generic_relations/serializers.py" in to_internal_value
39. serializer = self.get_deserializer_for_data(data)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/generic_relations/serializers.py" in get_deserializer_for_data
75. 'Could not determine a valid serializer for value %r.' % value)
During handling of the above exception (Could not determine a valid serializer for value ''.), another exception occurred:
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/serializers.py" in to_internal_value
488. validated_value = field.run_validation(primitive_value)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/fields.py" in run_validation
536. value = self.to_internal_value(data)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/generic_relations/serializers.py" in to_internal_value
41. raise ValidationError(e)
During handling of the above exception (["Could not determine a valid serializer for value ''."]), another exception occurred:
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/fields.py" in get_error_detail
240. error_dict = exc_info.error_dict
During handling of the above exception ('ValidationError' object has no attribute 'error_dict'), another exception occurred:
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
126. response = self.process_exception_by_middleware(e, request)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
124. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
54. return view_func(*args, **kwargs)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/viewsets.py" in view
116. return self.dispatch(request, *args, **kwargs)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/views.py" in dispatch
495. response = self.handle_exception(exc)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/views.py" in handle_exception
455. self.raise_uncaught_exception(exc)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/views.py" in dispatch
492. response = handler(request, *args, **kwargs)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/mixins.py" in create
20. serializer.is_valid(raise_exception=True)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/serializers.py" in is_valid
236. self._validated_data = self.run_validation(self.initial_data)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/serializers.py" in run_validation
434. value = self.to_internal_value(data)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/serializers.py" in to_internal_value
494. errors[field.field_name] = get_error_detail(exc)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/fields.py" in get_error_detail
245. for error in exc_info.error_list]
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/fields.py" in <listcomp>
245. for error in exc_info.error_list]
Exception Type: TypeError at /api/addresses/
Exception Value: unsupported operand type(s) for %: 'ImproperlyConfigured' and 'tuple'
python django django-rest-framework
Please add the full error traceback to your question.
– Klaus D.
Nov 23 '18 at 3:11
@KlausD, I just added it.
– lmiguelvargasf
Nov 23 '18 at 3:15
1
try to comment out the__str__()
method ofAddress
model and try again
– JPG
Nov 23 '18 at 3:21
@JPG, I did it, and I am still getting the same error. I wonder why you are suggesting that since the__str__
method is just a string representation.
– lmiguelvargasf
Nov 23 '18 at 3:24
If I do a web search for 'ImproperlyConfigured' I find a lot of results referencing 'ImproperlyConfigured' and wsgi. How are you running your server?
– Red Cricket
Nov 23 '18 at 4:29
|
show 3 more comments
I am getting the following error when I try to create a new object through the admin interface:
TypeError: unsupported operand type(s) for %: 'ImproperlyConfigured' and 'tuple'
I have the following models:
class CustomUser(AbstractUser):
def __str__(self):
return self.email
class Meta:
ordering = ('id',)
verbose_name = 'user'
class Address(models.Model):
"""Address contains information about location. Address can be own by any
kind of model."""
content_type = models.ForeignKey(
ContentType, on_delete=models.CASCADE, null=True
)
object_id = models.PositiveIntegerField(null=True)
owner = GenericForeignKey("content_type", "object_id")
CATEGORIES = Choices('billing', 'shipping')
category = models.CharField(choices=CATEGORIES, max_length=16)
address_1 = models.CharField("address line 1", max_length=128)
address_2 = models.CharField("address line 2", max_length=128, blank=True)
city = models.CharField(max_length=64)
state_province = models.CharField('state/province', max_length=128)
country = CountryField(blank_label='(select country)')
zip_code = models.CharField(max_length=10)
def __str__(self):
return (
f'{self.address_1}, {self.city}, {self.state_province}, '
f'{self.country.name}, {self.zip_code}'
)
class Meta:
ordering = ('id',)
class Company(Group):
"""An abstract base class that inherits Group."""
addresses = GenericRelation(Address)
owner = models.ForeignKey(User,
on_delete=models.CASCADE,
related_name='%(class)ss',
related_query_name='%(class)s')
logo = CloudinaryField('image',
default='your_logo_here',
null=True,
blank=True)
description = models.TextField('description', max_length=3000, blank=True)
facebook_url = models.URLField('facebook url', blank=True)
twitter_url = models.URLField('twitter url', blank=True)
instagram_url = models.URLField('instagram url', blank=True)
pinterest_url = models.URLField('pinterest url', blank=True)
portfolio_url = models.URLField('portfolio url', blank=True)
phone_number = PhoneNumberField('phone number', blank=True)
class Meta:
abstract = True
ordering = ('id',)
class Brand(Company):
"""A Brand can have multiple members."""
These are my serializers:
class CustomUserSerializer(HyperlinkedModelSerializer):
brands = HyperlinkedRelatedField(
many=True,
read_only=True,
view_name='brand-detail'
)
class Meta:
model = CustomUser
fields = (
'url',
'username',
'email',
'brands',
)
class AddressSerializer(HyperlinkedModelSerializer):
owner = GenericRelatedField({
Brand: HyperlinkedRelatedField(
queryset=Brand.objects.all(),
view_name='brand-detail',
)
})
class Meta:
model = Address
fields = (
'url',
'category',
'address_1',
'address_2',
'city',
'state_province',
'country',
'zip_code',
'owner',
)
class BrandSerializer(HyperlinkedModelSerializer):
addresses = HyperlinkedRelatedField(many=True,
read_only=True,
view_name='address-detail')
class Meta:
model = Brand
fields = (
'url',
'owner',
'logo',
'description',
'facebook_url',
'twitter_url',
'instagram_url',
'pinterest_url',
'portfolio_url',
'phone_number',
'addresses',
)
This is how I configured the urls:
router = DefaultRouter()
router.register('users', CustomUserViewSet)
router.register('addresses', AddressViewSet)
router.register('brands', BrandViewSet)
urlpatterns = [
path('', include(router.urls)),
path('auth/', include('rest_framework.urls', namespace='rest_framework')),
]
I can access http://localhost:8000/api/addresses/
, and I have the following form:
The problem is when I try to POST to create a new object. I am getting that error I have described, and it seems because I am not passing properly the owner (actually I have no idea how to pass an object here, should I use a JSON or how).
Questions:
How can I solve this error because I am also trying to test the POST method, and it was when I realized this was not working?
Is there any way to include the fields of a
GenericForeignKey
in that form?
This is my traceback:
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/generic_relations/serializers.py" in to_internal_value
39. serializer = self.get_deserializer_for_data(data)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/generic_relations/serializers.py" in get_deserializer_for_data
75. 'Could not determine a valid serializer for value %r.' % value)
During handling of the above exception (Could not determine a valid serializer for value ''.), another exception occurred:
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/serializers.py" in to_internal_value
488. validated_value = field.run_validation(primitive_value)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/fields.py" in run_validation
536. value = self.to_internal_value(data)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/generic_relations/serializers.py" in to_internal_value
41. raise ValidationError(e)
During handling of the above exception (["Could not determine a valid serializer for value ''."]), another exception occurred:
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/fields.py" in get_error_detail
240. error_dict = exc_info.error_dict
During handling of the above exception ('ValidationError' object has no attribute 'error_dict'), another exception occurred:
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
126. response = self.process_exception_by_middleware(e, request)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
124. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
54. return view_func(*args, **kwargs)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/viewsets.py" in view
116. return self.dispatch(request, *args, **kwargs)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/views.py" in dispatch
495. response = self.handle_exception(exc)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/views.py" in handle_exception
455. self.raise_uncaught_exception(exc)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/views.py" in dispatch
492. response = handler(request, *args, **kwargs)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/mixins.py" in create
20. serializer.is_valid(raise_exception=True)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/serializers.py" in is_valid
236. self._validated_data = self.run_validation(self.initial_data)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/serializers.py" in run_validation
434. value = self.to_internal_value(data)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/serializers.py" in to_internal_value
494. errors[field.field_name] = get_error_detail(exc)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/fields.py" in get_error_detail
245. for error in exc_info.error_list]
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/fields.py" in <listcomp>
245. for error in exc_info.error_list]
Exception Type: TypeError at /api/addresses/
Exception Value: unsupported operand type(s) for %: 'ImproperlyConfigured' and 'tuple'
python django django-rest-framework
I am getting the following error when I try to create a new object through the admin interface:
TypeError: unsupported operand type(s) for %: 'ImproperlyConfigured' and 'tuple'
I have the following models:
class CustomUser(AbstractUser):
def __str__(self):
return self.email
class Meta:
ordering = ('id',)
verbose_name = 'user'
class Address(models.Model):
"""Address contains information about location. Address can be own by any
kind of model."""
content_type = models.ForeignKey(
ContentType, on_delete=models.CASCADE, null=True
)
object_id = models.PositiveIntegerField(null=True)
owner = GenericForeignKey("content_type", "object_id")
CATEGORIES = Choices('billing', 'shipping')
category = models.CharField(choices=CATEGORIES, max_length=16)
address_1 = models.CharField("address line 1", max_length=128)
address_2 = models.CharField("address line 2", max_length=128, blank=True)
city = models.CharField(max_length=64)
state_province = models.CharField('state/province', max_length=128)
country = CountryField(blank_label='(select country)')
zip_code = models.CharField(max_length=10)
def __str__(self):
return (
f'{self.address_1}, {self.city}, {self.state_province}, '
f'{self.country.name}, {self.zip_code}'
)
class Meta:
ordering = ('id',)
class Company(Group):
"""An abstract base class that inherits Group."""
addresses = GenericRelation(Address)
owner = models.ForeignKey(User,
on_delete=models.CASCADE,
related_name='%(class)ss',
related_query_name='%(class)s')
logo = CloudinaryField('image',
default='your_logo_here',
null=True,
blank=True)
description = models.TextField('description', max_length=3000, blank=True)
facebook_url = models.URLField('facebook url', blank=True)
twitter_url = models.URLField('twitter url', blank=True)
instagram_url = models.URLField('instagram url', blank=True)
pinterest_url = models.URLField('pinterest url', blank=True)
portfolio_url = models.URLField('portfolio url', blank=True)
phone_number = PhoneNumberField('phone number', blank=True)
class Meta:
abstract = True
ordering = ('id',)
class Brand(Company):
"""A Brand can have multiple members."""
These are my serializers:
class CustomUserSerializer(HyperlinkedModelSerializer):
brands = HyperlinkedRelatedField(
many=True,
read_only=True,
view_name='brand-detail'
)
class Meta:
model = CustomUser
fields = (
'url',
'username',
'email',
'brands',
)
class AddressSerializer(HyperlinkedModelSerializer):
owner = GenericRelatedField({
Brand: HyperlinkedRelatedField(
queryset=Brand.objects.all(),
view_name='brand-detail',
)
})
class Meta:
model = Address
fields = (
'url',
'category',
'address_1',
'address_2',
'city',
'state_province',
'country',
'zip_code',
'owner',
)
class BrandSerializer(HyperlinkedModelSerializer):
addresses = HyperlinkedRelatedField(many=True,
read_only=True,
view_name='address-detail')
class Meta:
model = Brand
fields = (
'url',
'owner',
'logo',
'description',
'facebook_url',
'twitter_url',
'instagram_url',
'pinterest_url',
'portfolio_url',
'phone_number',
'addresses',
)
This is how I configured the urls:
router = DefaultRouter()
router.register('users', CustomUserViewSet)
router.register('addresses', AddressViewSet)
router.register('brands', BrandViewSet)
urlpatterns = [
path('', include(router.urls)),
path('auth/', include('rest_framework.urls', namespace='rest_framework')),
]
I can access http://localhost:8000/api/addresses/
, and I have the following form:
The problem is when I try to POST to create a new object. I am getting that error I have described, and it seems because I am not passing properly the owner (actually I have no idea how to pass an object here, should I use a JSON or how).
Questions:
How can I solve this error because I am also trying to test the POST method, and it was when I realized this was not working?
Is there any way to include the fields of a
GenericForeignKey
in that form?
This is my traceback:
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/generic_relations/serializers.py" in to_internal_value
39. serializer = self.get_deserializer_for_data(data)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/generic_relations/serializers.py" in get_deserializer_for_data
75. 'Could not determine a valid serializer for value %r.' % value)
During handling of the above exception (Could not determine a valid serializer for value ''.), another exception occurred:
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/serializers.py" in to_internal_value
488. validated_value = field.run_validation(primitive_value)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/fields.py" in run_validation
536. value = self.to_internal_value(data)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/generic_relations/serializers.py" in to_internal_value
41. raise ValidationError(e)
During handling of the above exception (["Could not determine a valid serializer for value ''."]), another exception occurred:
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/fields.py" in get_error_detail
240. error_dict = exc_info.error_dict
During handling of the above exception ('ValidationError' object has no attribute 'error_dict'), another exception occurred:
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
126. response = self.process_exception_by_middleware(e, request)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
124. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
54. return view_func(*args, **kwargs)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/viewsets.py" in view
116. return self.dispatch(request, *args, **kwargs)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/views.py" in dispatch
495. response = self.handle_exception(exc)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/views.py" in handle_exception
455. self.raise_uncaught_exception(exc)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/views.py" in dispatch
492. response = handler(request, *args, **kwargs)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/mixins.py" in create
20. serializer.is_valid(raise_exception=True)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/serializers.py" in is_valid
236. self._validated_data = self.run_validation(self.initial_data)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/serializers.py" in run_validation
434. value = self.to_internal_value(data)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/serializers.py" in to_internal_value
494. errors[field.field_name] = get_error_detail(exc)
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/fields.py" in get_error_detail
245. for error in exc_info.error_list]
File "/Users/user/.local/share/virtualenvs/na-ERB0uoVd/lib/python3.7/site-packages/rest_framework/fields.py" in <listcomp>
245. for error in exc_info.error_list]
Exception Type: TypeError at /api/addresses/
Exception Value: unsupported operand type(s) for %: 'ImproperlyConfigured' and 'tuple'
python django django-rest-framework
python django django-rest-framework
edited Nov 23 '18 at 3:15
lmiguelvargasf
asked Nov 23 '18 at 3:06
lmiguelvargasflmiguelvargasf
11.8k1085104
11.8k1085104
Please add the full error traceback to your question.
– Klaus D.
Nov 23 '18 at 3:11
@KlausD, I just added it.
– lmiguelvargasf
Nov 23 '18 at 3:15
1
try to comment out the__str__()
method ofAddress
model and try again
– JPG
Nov 23 '18 at 3:21
@JPG, I did it, and I am still getting the same error. I wonder why you are suggesting that since the__str__
method is just a string representation.
– lmiguelvargasf
Nov 23 '18 at 3:24
If I do a web search for 'ImproperlyConfigured' I find a lot of results referencing 'ImproperlyConfigured' and wsgi. How are you running your server?
– Red Cricket
Nov 23 '18 at 4:29
|
show 3 more comments
Please add the full error traceback to your question.
– Klaus D.
Nov 23 '18 at 3:11
@KlausD, I just added it.
– lmiguelvargasf
Nov 23 '18 at 3:15
1
try to comment out the__str__()
method ofAddress
model and try again
– JPG
Nov 23 '18 at 3:21
@JPG, I did it, and I am still getting the same error. I wonder why you are suggesting that since the__str__
method is just a string representation.
– lmiguelvargasf
Nov 23 '18 at 3:24
If I do a web search for 'ImproperlyConfigured' I find a lot of results referencing 'ImproperlyConfigured' and wsgi. How are you running your server?
– Red Cricket
Nov 23 '18 at 4:29
Please add the full error traceback to your question.
– Klaus D.
Nov 23 '18 at 3:11
Please add the full error traceback to your question.
– Klaus D.
Nov 23 '18 at 3:11
@KlausD, I just added it.
– lmiguelvargasf
Nov 23 '18 at 3:15
@KlausD, I just added it.
– lmiguelvargasf
Nov 23 '18 at 3:15
1
1
try to comment out the
__str__()
method of Address
model and try again– JPG
Nov 23 '18 at 3:21
try to comment out the
__str__()
method of Address
model and try again– JPG
Nov 23 '18 at 3:21
@JPG, I did it, and I am still getting the same error. I wonder why you are suggesting that since the
__str__
method is just a string representation.– lmiguelvargasf
Nov 23 '18 at 3:24
@JPG, I did it, and I am still getting the same error. I wonder why you are suggesting that since the
__str__
method is just a string representation.– lmiguelvargasf
Nov 23 '18 at 3:24
If I do a web search for 'ImproperlyConfigured' I find a lot of results referencing 'ImproperlyConfigured' and wsgi. How are you running your server?
– Red Cricket
Nov 23 '18 at 4:29
If I do a web search for 'ImproperlyConfigured' I find a lot of results referencing 'ImproperlyConfigured' and wsgi. How are you running your server?
– Red Cricket
Nov 23 '18 at 4:29
|
show 3 more comments
1 Answer
1
active
oldest
votes
If add read_only=True like the following:
owner = GenericRelatedField({
Brand: HyperlinkedRelatedField(
queryset=Brand.objects.all(),
view_name='brand-detail',
)
}, read_only=True)
the error will disappear. But then you need to write your
own create() method in the same serializer with serialization of owner to account for how
you would like to save owner.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53440189%2fdrf-cannot-post-or-create-a-new-object-through-admin-interface%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
If add read_only=True like the following:
owner = GenericRelatedField({
Brand: HyperlinkedRelatedField(
queryset=Brand.objects.all(),
view_name='brand-detail',
)
}, read_only=True)
the error will disappear. But then you need to write your
own create() method in the same serializer with serialization of owner to account for how
you would like to save owner.
add a comment |
If add read_only=True like the following:
owner = GenericRelatedField({
Brand: HyperlinkedRelatedField(
queryset=Brand.objects.all(),
view_name='brand-detail',
)
}, read_only=True)
the error will disappear. But then you need to write your
own create() method in the same serializer with serialization of owner to account for how
you would like to save owner.
add a comment |
If add read_only=True like the following:
owner = GenericRelatedField({
Brand: HyperlinkedRelatedField(
queryset=Brand.objects.all(),
view_name='brand-detail',
)
}, read_only=True)
the error will disappear. But then you need to write your
own create() method in the same serializer with serialization of owner to account for how
you would like to save owner.
If add read_only=True like the following:
owner = GenericRelatedField({
Brand: HyperlinkedRelatedField(
queryset=Brand.objects.all(),
view_name='brand-detail',
)
}, read_only=True)
the error will disappear. But then you need to write your
own create() method in the same serializer with serialization of owner to account for how
you would like to save owner.
answered Dec 20 '18 at 16:41
Hanna HowzHanna Howz
313
313
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53440189%2fdrf-cannot-post-or-create-a-new-object-through-admin-interface%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Please add the full error traceback to your question.
– Klaus D.
Nov 23 '18 at 3:11
@KlausD, I just added it.
– lmiguelvargasf
Nov 23 '18 at 3:15
1
try to comment out the
__str__()
method ofAddress
model and try again– JPG
Nov 23 '18 at 3:21
@JPG, I did it, and I am still getting the same error. I wonder why you are suggesting that since the
__str__
method is just a string representation.– lmiguelvargasf
Nov 23 '18 at 3:24
If I do a web search for 'ImproperlyConfigured' I find a lot of results referencing 'ImproperlyConfigured' and wsgi. How are you running your server?
– Red Cricket
Nov 23 '18 at 4:29