Skip to content
Advertisement

Error: __str__ returned non-string (type ModelName) in Django

I am attempting to create an issue tracker similar to github’s. I’m stuck on trying to implement the assigning feature, here’s what I have so far

class Assign(models.Model):
    name = models.OneToOneField(User, on_delete=models.SET_NULL, null=True)
    

class Issue(models.Model):
    MARK_AS = ((True, 'Open'), (False, 'Closed'))

    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    assignee = models.ForeignKey(Assign, on_delete=models.SET_NULL, null=True)
    mark_as = models.BooleanField(choices=MARK_AS, default=True)
    

    def __str__(self):
        return self.title
    

    def get_absolute_url(self):
        return reverse('issue-detail', kwargs={'pk': self.pk})

admin page I feel like I’m close, however when I try to use

class Assign(models.Model):
    name = models.OneToOneField(User, on_delete=models.SET_NULL, null=True)
    
    def __str__(self):
        return self.name

I get the error of

__str__ returned non-string (type User)

Anyone ideas on how to fix this? Thank you.

Advertisement

Answer

ERROR DESCRIPTION

str returned non-string (type User) means the Object representation method i.e Assign.__str__() method should always return a string and not an Object like you have returned there.

SOLUTION

Change you Assign Model str() method to be like this.

def __str__():
   return self.name.username

Note:

You should not always return self.user.username like I did there, but literally you can return any field you have in a User model with CharField property.

User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement