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.