如何在 admin.py 中显示图像,而我在员工 table 中的字段之一在 admin.py 中显示不正确?
How can I display image in admin.py and one of my field in employee table is not appearing correct in admin.py?
我正在创建员工监控系统。我现在有3个模型。他们在这里
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
没有给我这两个名字之间的任何差距。我不知道该怎么做。
并且我已经尝试了本网站上每个人建议的所有方法来在 admin.py 上显示图像,但我无法显示它们。这是我的 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
最后一件事,我的 designation_name
不仅返回了我 designation_name
,还返回了 department_name
。我只想designation_name
出现
对于未来 - 在 Whosebug 上的一个 Question
中只包含一个问题。多个问题应该分成几个主题。
添加字符串时,它们是无缝连接的。使用 format
函数通常不是将变量插入 string
的最佳方式。您可以通过两种方式解决:
# now
def __str__(self):
return '{} {} {}'.format(self.user.first_name + self.user.last_name, self.department_name.department_name, self.designation_name.designation_name)
# solution 1
def __str__(self):
return '{} {} {} {}'.format(self.user.first_name, self.user.last_name, self.department_name.department_name, self.designation_name.designation_name)
# solution 2
def __str__(self):
return f'{self.user.first_name} {self.user.last_name} {self.department_name.department_name} {self.designation_name.designation_name}'
关于designation_name。看看你在 Designation
模型的 __str__
方法中写了什么。
class Designation(models.Model):
...
def __str__(self):
return '{} {}'.format(self.department_name, self.designation_name)
只需将'{} {}'.format(self.department_name, self.designation_name)
替换为简单的self.designation_name
就可以了。
最后是管理图像。据此:https://books.agiliq.com/projects/django-admin-cookbook/en/latest/imagefield.html
您的 admin.py
可能类似于:
@admin.register(Employee)
class EmployeeAdmin(admin.ModelAdmin):
readonly_fields = ["show_image"]
def show_image(self, obj):
return mark_safe('<img src="{url}" width="{width}" height={height} />'.format(
url=obj.image.url,
width=obj.image.width,
height=obj.image.height,
)
)
list_display= ('first_name', 'last_name', 'designation_name', 'department', 'salary', 'image')
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
我正在创建员工监控系统。我现在有3个模型。他们在这里
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
没有给我这两个名字之间的任何差距。我不知道该怎么做。
并且我已经尝试了本网站上每个人建议的所有方法来在 admin.py 上显示图像,但我无法显示它们。这是我的 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
最后一件事,我的 designation_name
不仅返回了我 designation_name
,还返回了 department_name
。我只想designation_name
出现
对于未来 - 在 Whosebug 上的一个 Question
中只包含一个问题。多个问题应该分成几个主题。
添加字符串时,它们是无缝连接的。使用 format
函数通常不是将变量插入 string
的最佳方式。您可以通过两种方式解决:
# now
def __str__(self):
return '{} {} {}'.format(self.user.first_name + self.user.last_name, self.department_name.department_name, self.designation_name.designation_name)
# solution 1
def __str__(self):
return '{} {} {} {}'.format(self.user.first_name, self.user.last_name, self.department_name.department_name, self.designation_name.designation_name)
# solution 2
def __str__(self):
return f'{self.user.first_name} {self.user.last_name} {self.department_name.department_name} {self.designation_name.designation_name}'
关于designation_name。看看你在 Designation
模型的 __str__
方法中写了什么。
class Designation(models.Model):
...
def __str__(self):
return '{} {}'.format(self.department_name, self.designation_name)
只需将'{} {}'.format(self.department_name, self.designation_name)
替换为简单的self.designation_name
就可以了。
最后是管理图像。据此:https://books.agiliq.com/projects/django-admin-cookbook/en/latest/imagefield.html
您的 admin.py
可能类似于:
@admin.register(Employee)
class EmployeeAdmin(admin.ModelAdmin):
readonly_fields = ["show_image"]
def show_image(self, obj):
return mark_safe('<img src="{url}" width="{width}" height={height} />'.format(
url=obj.image.url,
width=obj.image.width,
height=obj.image.height,
)
)
list_display= ('first_name', 'last_name', 'designation_name', 'department', 'salary', 'image')
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