1

所以我是 Django 的新手,我一直在阅读很多文档来弄清楚这一点,我有一个名为“Logs”的表,其中包含不同位置的日志(具有表“Position”的 FK),每个位置都属于一个部门(对表“部门”有 FK)检查下图:1

我想要做的是创建一个像这样的视图: 2

并且每当您单击一个部门时,它会扩展其中的所有职位及其各自的日志,如下所示: 3

我附上的屏幕截图是我在主应用程序中的工作(或者如果您想将其称为前端),我想在 Django 管理页面中复制相同的过程,我一直看到我应该使用内联但我不能似乎使它工作,有人可以帮助或让我朝着正确的方向前进吗?非常感激。

这是我的 models.py 中的内容:

from django.db import models
from django.contrib.auth.models import User
from PIL import Image


class Site(models.Model):
    site = models.CharField(max_length=200, blank=True, null=True)
    totalHC = models.IntegerField(blank=True, null=True)

    def __str__(self):
        return self.site


class Department(models.Model):
    department = models.CharField(max_length=200, blank=True)

    def __str__(self):
        return self.department


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    site = models.ForeignKey(Site, on_delete=models.CASCADE, null=True, default=Site(id="1").site)
    department = models.ForeignKey(
        "Department", on_delete=models.CASCADE, null=True)
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    bio = models.CharField(max_length=2000, blank=True)
    skills = models.CharField(max_length=2000, blank=True)
    aoi = models.CharField(max_length=2000, blank=True)
    github = models.CharField(max_length=200, blank=True)
    linkedin = models.CharField(max_length=200, blank=True)

    def __str__(self):
        return f'{self.user.username} Profile'

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        img = Image.open(self.image.path)
        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.image.path)


class Grade(models.Model):
    user = models.OneToOneField(Profile, on_delete=models.CASCADE)
    ut1 = models.CharField(max_length=200, blank=True)
    ut2 = models.CharField(max_length=200, blank=True)
    ut3 = models.CharField(max_length=200, blank=True)

    ut1p = models.ImageField(upload_to='plots', blank=True)
    ut2p = models.ImageField(upload_to='plots', blank=True)
    ut3p = models.ImageField(upload_to='plots', blank=True)

    ut1pb = models.ImageField(upload_to='plots', blank=True)
    ut2pb = models.ImageField(upload_to='plots', blank=True)
    ut3pb = models.ImageField(upload_to='plots', blank=True)

    ut12 = models.ImageField(upload_to='plots', blank=True)
    ut13 = models.ImageField(upload_to='plots', blank=True)
    ut23 = models.ImageField(upload_to='plots', blank=True)


class Section(models.Model):
    class Meta:
        verbose_name = 'Department'
        verbose_name_plural = 'Departments'

    section = models.CharField(max_length=200, blank=True)

    def __str__(self):
        return self.section


class Question(models.Model):
    class Meta:
        verbose_name = 'Position'
        verbose_name_plural = 'Positions'

    section = models.ForeignKey(
        "Section", on_delete=models.CASCADE, null=True, blank=True)
    question_field = models.CharField(max_length=2000, blank=True, null=True)

    def __str__(self):
        return self.question_field


class Answer(models.Model):
    class Meta:
        verbose_name = 'Log'
        verbose_name_plural = 'Logs'

    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    user = models.ForeignKey(Profile, on_delete=models.CASCADE)
    answer_field = models.CharField(max_length=2000, blank=True, null=True)

    def __str__(self):
        return f"{self.user} answered {self.answer_field}"


class Position1(models.Model):
    class Meta:
        verbose_name = 'Position'
        verbose_name_plural = 'Positions'

    department = models.ForeignKey(
        "Department", on_delete=models.CASCADE, null=True, blank=True)
    position = models.CharField(max_length=200, blank=True)
    jobID = models.CharField(max_length=200, blank=True)

    class HCtype(models.TextChoices):
        Staff = 'Staff', ('Staff')
        IDL = 'IDL', ('IDL')
        DL = 'DL', ('DL')

    hctype = models.CharField(
        max_length=5,
        choices=HCtype.choices,

    )

    def __str__(self):
        return self.position


class Log(models.Model):
    position = models.ForeignKey(Position1, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    site = models.ForeignKey(Site, on_delete=models.CASCADE)
    INN = models.IntegerField(blank=True, null=True)
    OUT = models.IntegerField(blank=True, null=True)
    date = models.CharField(max_length=200, blank=True)
    internal = models.IntegerField(default=0, null=True)


class SiteHasPosition(models.Model):
    date = models.CharField(max_length=200, blank=True)
    site = models.ForeignKey(Site, on_delete=models.CASCADE)
    position = models.ForeignKey(Position1, on_delete=models.CASCADE)
    value = models.IntegerField(blank=True, null=True)
    standard = models.IntegerField(blank=True, null=True)
    turn_over = models.IntegerField(blank=True, null=True)


class SiteHasDepartment(models.Model):
    date = models.CharField(max_length=200, blank=True)
    site = models.ForeignKey(Site, on_delete=models.CASCADE)
    department = models.ForeignKey(Department, on_delete=models.CASCADE)
    value = models.IntegerField(blank=True, null=True)


class SiteKPIs(models.Model):
    site = models.ForeignKey(Site, on_delete=models.CASCADE)
    date = models.CharField(max_length=200, blank=True)
    staff = models.IntegerField(blank=True, null=True)
    dl = models.IntegerField(blank=True, null=True)
    idl = models.IntegerField(blank=True, null=True)
    total_hc = models.IntegerField(blank=True, null=True)
    total_in = models.IntegerField(blank=True, null=True)
    total_out = models.IntegerField(blank=True, null=True)
    staff_rate = models.IntegerField(blank=True, null=True)
    dl_rate = models.IntegerField(blank=True, null=True)
    idl_rate = models.IntegerField(blank=True, null=True)

Here is how I registred them in admin.py : 

admin.site.register(Profile)
admin.site.register(Log)
admin.site.register(Position1)
admin.site.register(Department)
admin.site.register(Site)
admin.site.register(SiteHasDepartment)
admin.site.register(SiteHasPosition)

我想在 admin.py 中有一个页面,我可以在其中选择一个站点并为该特定站点显示:所有部门(当您按下 dpt 时,所有职位都会扩展)每个职位的标准HC,来自日志表的属性(匹配那个位置和那个站点)和来自 SiteHasPosition 的属性(匹配那个站点和那个位置)

我希望我说得更清楚

4

0 回答 0