
Bernardo Augusto García Loaiza
PreguntaHola amigos. Tengo un problema renderizando una lista de objetos en DRF. De pronto pueden porfa darme una mano.
Tengo el siguiente modelo con una clave primaria personalizada:
<code> classField(models.Model): FIELD_TYPE_NATURE = 'Grama natural' FIELD_TYPE_ARTIFICIAL = 'Grama sintetica' FIELD_TYPE_CHOICES = ( (FIELD_TYPE_NATURE, u'Grama natural'), (FIELD_TYPE_ARTIFICIAL, u'Grama sintetica'), ) MODALITY_11 = 'Fútbol 11' MODALITY_8 = 'Fútbol 8' MODALITY_CHOICES = ( (MODALITY_11, u'Fútbol 11'), (MODALITY_8, u'Fútbol 8'), ) name = models.CharField( max_length=150, unique=True, db_index=True, primary_key=True, ) field_type = models.CharField( choices=FIELD_TYPE_CHOICES, default=False, blank=False, max_length=20, verbose_name=('Tipo de material/grama de la cancha') ) modality = models.CharField( max_length=40, blank=False, verbose_name='Modalidad' ) photo = models.ImageField(upload_to='fields', blank=True, null=True) def__str__(self): return'%s %s %s' % (self.name, self.field_type, self.location)
Mi serializador es el siguiente:
<code> class FieldSerializer(serializers.HyperlinkedModelSerializer): #url = serializers.HyperlinkedIdentityField(view_name='field-detail',) class Meta: model = Field fields = ('url', 'name','field_type','modality','photo','location')
Mi viewset y mi router
<code> class FieldViewSet(viewsets.ModelViewSet): queryset = Field.objects.all() serializer_class = FieldSerializer
<code> router = routers.DefaultRouter() router.register(r'fields', FieldViewSet)
Y mi url:
url(r'^api/', include(router.urls)),
Cuando voy a mi url
<url>/api/fields
<code> File "/home/bgarcial/.virtualenvs/fuupbol2/lib/python3.5/site-packages/rest_framework/relations.py", line 386, in to_representation raise ImproperlyConfigured(msg % self.view_name) django.core.exceptions.ImproperlyConfigured: Could not resolve URL for **hyperlinked relationship using view name "field-detail". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field.** [11/Nov/2016 16:39:53] "GET /api/fields/ HTTP/1.1" 500 187477
Decido utilizar
HyperlinkedIdentityField
FieldSerializer
<code> class FieldSerializer(serializers.HyperlinkedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='field-detail',) class Meta: model = Field fields = ('url', 'name','field_type','modality','photo','location')
Y obtengo el mismo error.
Django me dice que por defecto seestá generando una vista de tipo
<model-name>-detail
router
detail
ViewSet
En la documentaciónen el parametro
view_name
Tengo una duda y puede ser porque no comprendo del todo los procesos de serialización …
Si yo estoy queriendo obtener una lista de objetos con
<url>/api/fields
url = serializers.HyperlinkedIdentityField(view_name='field-list',)
No entiendo las situaciones en las cuales deba usar los atrubutos
view_name
Aunque aquí explican algo de ello http://stackoverflow.com/a/26989845/2773461
Se que en la documentación esta, pero ¿cuando debo utilizar
HyperlinkedModelSerializer
ModelSerializer
Agradezco un poco de orientación aca en caso de ser posible. Muchas gracias.

Bernardo Augusto García Loaiza
Cuando yo declaro mi vista como
fields
fields-detail
view_name
HyperLinkedIdentityField
Asi solucioné el problema:
`classFieldSerializer(serializers.HyperlinkedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name=‘fields-detail’,)
classMeta: model = Field fields = ('url', 'name','field_type','modality','photo','location')`