Reputation: 431
I'm new with this django rest framework thing and I'm having a problem showing one of my models in the api interface.
I have 3 models that are related License, Profile and Rules. I can see Profile and License clearly but Rules (which is related with profile and license) gives me the next error:
Got AttributeError when attempting to get a value for field
name
on serializerLicenseSerializer
. The serializer field might be named incorrectly and not match any attribute or key on theRule
instance. Original exception text was: 'Rule' object has no attribute 'name'.
This is my model file:
models.py:
class License(LogsMixin, models.Model):
"""Definicion de modelo para licencias"""
name = models.CharField(
"Nombre de la licencia",
max_length=100,
null=False,
blank=False)
billable = models.BooleanField(default=False)
dateadded = models.DateTimeField("Fecha de inserción", default=datetime.datetime.now)
class Profile(LogsMixin, models.Model):
"""Definición de modelo para Perfiles"""
name = models.CharField(
"Nombre de la perfil de usuario",
max_length=100,
null=False,
blank=False
)
dateadded = models.DateTimeField("Fecha de inserción", default=datetime.datetime.now)
class Rule(LogsMixin, models.Model):
"""Definición de modelo para Reglas"""
FIELDS = [
('user_name', 'Nombre de usuario'),
('user_code', 'Codigo de usuario')
]
string = models.CharField("Cadena de referencia", max_length=100, null=False, default="", blank=False)
profile = models.ForeignKey(Profile, null=False, default=None, on_delete=models.DO_NOTHING)
license = models.ForeignKey(License, null=False, default=None, on_delete=models.DO_NOTHING)
field = models.CharField("Campo objetivo", max_length=50, default='nombre_usuario', choices=FIELDS)
include = models.BooleanField("Incluye", null=False, default=True)
order = models.IntegerField("Orden", null=True, default=None)
uppercase_sensitive = models.BooleanField("Sensible a las mayúsculas", null=False, default=False)
dateadded = models.DateTimeField("Fecha de inserción", default=datetime.datetime.now)
This is the serializers.py file:
from rest_framework import serializers
from .models import License, Profile, Rule
class ProfileSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Profile
fields = [
'name',
]
class LicenseSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = License
fields = [
'name',
'billable'
]
class RuleSerializer(serializers.HyperlinkedModelSerializer):
license = LicenseSerializer(many=False, read_only=True, allow_null=True)
profile = ProfileSerializer(many=False, read_only=True, allow_null=True)
class Meta:
model = Rule
fields = [
"string",
"profile",
"license",
"field",
"include",
"order",
"uppercase_sensitive"
]
routers_view.py file:
from django.shortcuts import render
from rest_framework import permissions, viewsets
from .models import Rule, License, Profile
from .serializers import ProfileSerializer, LicenseSerializer, RuleSerializer
class LicenseViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = License.objects.all().order_by('name')
serializer_class = LicenseSerializer
permission_classes = [permissions.IsAuthenticated]
class ProfileViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = Profile.objects.all().order_by('name')
serializer_class = ProfileSerializer
permission_classes = [permissions.IsAuthenticated]
class RuleViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = Rule.objects.all().order_by('string')
serializer_class = LicenseSerializer
permission_classes = [permissions.IsAuthenticated]
urls.py
from rest_framework import routers, serializers, viewsets
from rules.router_views import ProfileViewSet, LicenseViewSet, RuleViewSet
router.register(r'call', CallViewSet)
router.register(r'rules', RuleViewSet)
router.register(r'profiles', ProfileViewSet)
router.register(r'licenses', LicenseViewSet)
I know that I must be missing something super stupid but I have been here for hours and I can't find it.
Any help will be appreciated
Upvotes: 0
Views: 1031
Reputation: 7717
class RuleViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = Rule.objects.all().order_by('string')
serializer_class = LicenseSerializer
serializer_class = LicenseSerializer
should be serializer_class = RuleSerializer
Upvotes: 2