'How can I display image in admin.py and one of my field in employee table is not appearing correct in admin.py?

I am working on creating Employee monitoring system. I have 3 models right now. Here they are

class User(models.Model):
    username= models.CharField(max_length=256, verbose_name='Username')
    first_name = models.CharField(max_length=256, verbose_name='First Name')
    last_name = models.CharField(max_length=256, verbose_name='Last Name')
    email=models.EmailField(max_length=256, verbose_name='Email')

    def __str__(self):
        return self.first_name + self.last_name

class Departments(models.Model):
    department_name= models.CharField(max_length=256, verbose_name='Departments')

    def __str__(self):
        return self.department_name


class Designation(models.Model):
    department_name= models.ForeignKey(Departments, on_delete=models.CASCADE)
    designation_name=models.CharField(max_length=256, verbose_name='Designation')

    def __str__(self):
        return '{} {}'.format(self.department_name, self.designation_name)

class Employee(models.Model):
    user= models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True,)
    department_name= models.ForeignKey(Departments, on_delete=models.CASCADE)
    designation_name= models.ForeignKey(Designation, on_delete=models.CASCADE)
    salary= models.FloatField(null=False, default=0.0, verbose_name='Salary')
    image = models.ImageField(upload_to = 'employee_images', null=True, blank=True)

    def __str__(self):
        return '{} {} {}'.format(self.user.first_name + self.user.last_name, self.department_name.department_name, self.designation_name.designation_name)

    def image_tag(self):
        return mark_safe('<img src="/employee_images/%s" width="150" height="150" />' % (self.image))
    image_tag.short_description = 'Image'


my return self.first_name +self.last_name in def __str__(self) of employee table is not giving me any gap between these two names. I don't know how to do it.

and I have tried every method suggested by everyone on this website to display image on admin.py but I am unable to display them. Here is my admin.py

admin.py

@admin.register(Employee)
class EmployeeAdmin(admin.ModelAdmin):
    list_display= ('first_name', 'last_name', 'designation_name', 'department', 'salary', 'image_tag')
    def first_name(self, obj):
        return obj.user.first_name
    
    def last_name(self, obj):
        return obj.user.last_name

    def designation_name(self, obj):
        return obj.designation.designation_name
    
    def department(self, obj):
        return obj.department_name.department_name


and one last thing my designation_name is not only returning me designation_name but also department_name as well. I just want designation_name to be appeared.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source