Prometheus
Prometheus

Reputation: 33615

Django ORM Object has no attribute '_set'

I assumed Django automatically created the _set for me but I'm the following error.

for dep_badge in self.badge.badge_set.all():
AttributeError: 'Badge' object has no attribute 'badge_set'

Models:

class Badge(RewardBase):
    """
    Represents a Badge.
    """
    name = models.CharField(max_length=60, help_text="Name of the badge")
    description = models.TextField(max_length=150)
    reputation_value = models.IntegerField(help_text="Value given in accumulate reputation", default=0)
    reputation_prerequisite = models.IntegerField(help_text="Point value needed to obtain", default=0)
    difficulty_level = models.IntegerField(choices=STATUS_TYPES, default=STATUS_EASY,
                                           help_text="Badge difficulty")


class Award(RewardBase):
    """
    Representation of a badge awarded to a user.
    """

    description = models.CharField(max_length=100, choices=STATUS_TYPES, default=STATUS_GENERAL)
    value = models.IntegerField(default=0)
    read = models.BooleanField(default=False, help_text="Has the user read this?")
    created = models.DateTimeField(blank=True, null=True, editable=False)
    hidden = models.BooleanField(default=False)

    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    badge = models.ForeignKey("Badge")


    def save(self, *args, **kwargs):


        super(Award, self).save(*args, **kwargs)


            for dep_badge in self.badge.badge_set.all():
                dep_badge.check_prerequisites(self.user, sel

f.badge, self)

Upvotes: 1

Views: 2407

Answers (2)

obayhan
obayhan

Reputation: 1732

Badge has no badge_set.No foreign key to itself. Maybe u mean award_set?

Upvotes: 2

karthikr
karthikr

Reputation: 99620

It looks like you intend to do

self.badge.award_set.all()

instead. badge_set is looking for a reverse relationship to the Badge model, which does not exist.

Upvotes: 1

Related Questions