Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

type object 'X' has no attribute 'objects'

I am using Django and Django Rest Framework 2.4.0

I get the Attribute error type object 'Notification' has no attribute 'objects'

models.py

class Notification(models.Model):
    NOTIFICATION_ID = models.AutoField(primary_key=True)
    user = models.ForeignKey(User, related_name='user_notification')
    type = models.ForeignKey(NotificationType)
    join_code = models.CharField(max_length=10, blank=True)
    requested_userid = models.CharField(max_length=25, blank=True)
    datetime_of_notification = models.DateTimeField()
    is_active = models.BooleanField(default=True)

serializers.py:

class NotificationSerializer(serializers.ModelSerializer):
    class Meta:
        model = Notification
        fields = (
            'type',
            'join_code',
            'requested_userid',
            'datetime_of_notification'
        )

api.py:

class Notification(generics.ListAPIView):
    serializer_class = NotificationSerializer
    def get_queryset(self):
        notifications = Notification.objects.all()
        return notifications

Can anybody help me to figure this out? It fails in api.py at the line notifications = Notification.objects.all()

like image 874
Matchday Avatar asked Feb 21 '16 23:02

Matchday


3 Answers

The line notifications = Notification.objects.all() is referencing the Notification View class defined in api.py and not models.py.

The easiest way to fix this error is to rename the Notification class in either api.py or models.py so that you can refer to your model properly. Another option would be to use named imports:

from .models import Notification as NotificationModel

class Notification(generics.ListAPIView):
    ...
    def get_queryset(self):
        notifications = NotificationModel.objects.all()
        ...
like image 192
Derek Kwok Avatar answered Nov 18 '22 22:11

Derek Kwok


Add objects = models.Manager() to your model, or any other custom manager that you are using and/or define.

class Notification(models.Model):
    NOTIFICATION_ID = models.AutoField(primary_key=True)
    user = models.ForeignKey(User, related_name='user_notification')
    type = models.ForeignKey(NotificationType)
    join_code = models.CharField(max_length=10, blank=True)
    requested_userid = models.CharField(max_length=25, blank=True)
    datetime_of_notification = models.DateTimeField()
    is_active = models.BooleanField(default=True)

    objects = models.Manager()
like image 32
Paul Tuckett Avatar answered Nov 18 '22 23:11

Paul Tuckett


Not the answer to this question but if you have come via Google you may have accidentally marked your model as abstract and are trying to query it directly, in which case you need to remove:

    class Meta:
        abstract = True
like image 1
Cam Rail Avatar answered Nov 18 '22 23:11

Cam Rail