2

我正在创建员工监控系统。我现在有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'


return self.first_name +self.last_name的 in def __str__(self)ofemployee table并没有给我这两个名字之间的任何差距。我不知道该怎么做。

我已经尝试了这个网站上每个人建议的所有方法来在 admin.py 上显示图像,但我无法显示它们。这是我的 admin.py

管理员.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出现。

4

1 回答 1

2

对于未来 - 在QuestionStackOverflow 上的一个中只包含一个问题。多个问题应分为几个主题。

当您添加字符串时,它们会无间隙地连接。使用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。看看你在模型中的__str__方法中写了什么。Designation

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.htmladmin.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
于 2022-02-03T10:22:27.640 回答