首页 > 解决方案 > Django 模型为所有用户创建一个任务

问题描述

所以我正在尝试构建一个 webapp,其中向所有用户提供相同的任务,当用户完成任务时,他们可以将其标记为已完成,为此我添加了一个“状态”布尔值,当“任务”不完整,用户可以通过按钮将其设置为false,问题是当我使用多对多字段时,如果一个用户更改“状态”,每个人都会更改。

我也尝试使用外键,但如果我使用外键,我必须为每个用户创建一个任务。

我想要的是创建一个任务,将其分配给所有用户,然后所有用户都可以与该任务进行交互,而不会影响其他用户看到的内容。

这些是我创建的模型(西班牙语):

class Usuario(AbstractUser):
    pass


class Tps(models.Model):

    users = models.ForeignKey(Usuario, on_delete=CASCADE)
    titulo = models.CharField(max_length=100)

    TECNOLOGIA_DE_LA_FABRICACION = 'TDF'
    MANTENIMIENTO_Y_REPARACION_DE_EQUIPOS = 'MYRDE'
    MAQUINAS_ELECTRICAS_Y_ENSAYOS = 'MEYE'
    SEGURIDAD_E_HIGIENE_INDUSTRIAL = 'SEHI'
    LABORATORIO_DE_ENSAYOS_INDUSTRIALES = 'LDEI'
    INSTALACIONES_INDUSTRIALES = 'II'
    RELACIONES_HUMANAS = 'RH'
    TALLER_DE_ELECTROMECANICA = 'TE'
    ORGANIZACION_INDUSTRIAL = 'OI'
    INSTALACIONES_ELECTRICAS = 'IE'
    EDUCACION_FISICA = 'EF'
    EQUIPOS_Y_APARATOS_DE_MANIOBRA_Y_TRANSPORTE = 'EYADMYT'

    MATERIAS_CHOICES = [
        (TECNOLOGIA_DE_LA_FABRICACION, 'Tecnologia de la fabricación'),
        (MANTENIMIENTO_Y_REPARACION_DE_EQUIPOS, 'Mantenimiento y R de equipos'),
        (MAQUINAS_ELECTRICAS_Y_ENSAYOS, 'Máquinas eléctricas y ensayos'),
        (SEGURIDAD_E_HIGIENE_INDUSTRIAL, 'Seguridad e higiene industrial'),
        (LABORATORIO_DE_ENSAYOS_INDUSTRIALES,
         'Laboratorio de ensayos industriales'),
        (INSTALACIONES_INDUSTRIALES, 'Instalaciones industriales'),
        (RELACIONES_HUMANAS, 'Relaciones humanas'),
        (TALLER_DE_ELECTROMECANICA, 'Taller de electromecánica'),
        (ORGANIZACION_INDUSTRIAL, 'Organización industrial'),
        (INSTALACIONES_ELECTRICAS, 'Instalaciones eléctricas'),
        (EDUCACION_FISICA, 'Educacion fisica'),
        (EQUIPOS_Y_APARATOS_DE_MANIOBRA_Y_TRANSPORTE,
         'Equipos y aparatos de maniobra y transporte')
    ]
    materia = models.CharField(
        max_length=8, choices=MATERIAS_CHOICES, default=None)

    fecha_actual = models.DateField(default=timezone.now)
    fecha_entrega = models.DateField(auto_now=False, auto_now_add=False)

    material = models.URLField()
    consignas = models.URLField()

    status = models.BooleanField(default=True)

    def __str__(self):
        return self.titulo

如果有人可以帮助我,那就太好了,谢谢:)

标签: pythondjangosqlitemodel

解决方案


我认为您应该使用中间表并与“通过”属性建立关系,这样您就可以制作一个像

class Tps(models.Model):
    users = models.ForeignKey(Usuario, on_delete=CASCADE, through='TaskDone')

class TaskDone(models.Model):
        user = models.ForeignKey(Usuario, on_delete=models.CASCADE)
        tps = models.ForeignKey(Tps, on_delete=models.CASCADE)
        status = models.BooleanField(default=True)

推荐阅读