【问题标题】:get all rows that foreignkey exist on other table by id filtered by employeeid通过employeeid过滤的id获取其他表上存在外键的所有行
【发布时间】:2014-05-06 01:20:59
【问题描述】:

我有以下 ORM 查询集,它可以正常工作,但现在我需要它来排除自己出现在已经在表上添加了具有相同 ID 的行的用户面前。

换句话说,如果用户已经为该特定问题添加了答案,我希望用户不要两次回答该问题,他将永远不会看到这些值。这是我的查询 ORM

right_now = datetime.datetime.now() - timedelta(minutes=-10)
partidos = encuesta.objects.filter(fecha__gt=right_now).order_by('fecha')

上面的这个 ORM 查询显示了从今天到截止日期前 10 分钟的所有问题。

现在我只想显示特定用户已经回答的问题。正如您在下面看到的,我只需要显示他尚未回答但仍按日期和相同顺序过滤的那些问题。

有什么想法吗?

这是我的模型。

models.py

class equipo(models.Model):

nombre = models.CharField(max_length=30)
bandera = StdImageField(upload_to='bandera/%Y/%m/%d',
                        variations={
                        'large':(53,53, False),
                        'thumbnail': (70, 26, False)})

GRUPOS = (
    ('A', 'Grupo A'),
    ('B', 'Grupo B'),
    ('C', 'Gropo C'),
    ('D', 'Gropo D'),
    ('E', 'Gropo E'),
    ('F', 'Gropo F'),
    ('G', 'Gropo G'),
    ('H', 'Gropo H'),
)

grupo = models.CharField(max_length=1, choices=GRUPOS)

def banderaEquipo(self):
    return '<img src="/media/%s">' % (self.bandera.thumbnail)

banderaEquipo.allow_tags = True

def __unicode__(self):
    return self.nombre


class encuesta(models.Model):

equipoA = models.ForeignKey(equipo, related_name='equipo_equipoA')
golesEquipoA = models.IntegerField(max_length=2, null=True, blank=True)
equipoB = models.ForeignKey(equipo, related_name='equipo_equipoB')
golesEquipoB = models.IntegerField(max_length=2, null=True, blank=True)

ETAPA = (
    ('1', 'Primera Etapa'),
    ('2', 'Octavos De Final'),
    ('3', 'Cuartos De Final'),
    ('4', 'Semifinal'),
    ('5', 'Final'),
    ('6', '3ra Posicion')
)

etapa = models.CharField(max_length=1, choices=ETAPA)
fecha = models.DateTimeField(auto_now_add=False)

def __unicode__(self):

    return "%s Vs. %s" % (unicode(self.equipoA), unicode(self.equipoB))


class respuesta(models.Model):

encuesta = models.ForeignKey(encuesta)
empresa = models.ForeignKey(empresa)
empleado = models.ForeignKey(empleado)
equipoA = models.IntegerField(max_length=1)
equipoB = models.IntegerField(max_length=1)
fecha = models.DateField(auto_now_add=True)

def __unicode__(self):

    return "%s" % (unicode(self.encuesta))

【问题讨论】:

  • 请解释模型:encuesta - 这是问题吗? respuesta - 这是答案?什么外键连接用户回答:empresa?恩普莱多?
  • 有一个英文变量的例子可能会更容易回答这个问题。
  • @zymud 是的,确实 question=encuesta 和 answer=respuesta 和 respuesta 通过外键与 encuesta 相关联,并且有一个 empleado = 用户来查看它属于谁。我需要的是带来所有 encuestas = 当前用户在 respuestas=answers 中不存在的答案 = empleado

标签: django django-models orm


【解决方案1】:

主要思想:

Question.objects.exclude(answers__user=user)

在您的情况下(如果您将相关名称 encuestas 添加到 respuesta FK 字段 encuesta):

encuesta.objects.exclude(respuesta__empleado=user).filter(fecha__gt=right_now).order_by('fecha')

【讨论】:

  • 谢谢,感谢您抽出宝贵时间。但不是 encuestas 是 respuesta :) partidos = encuesta.objects.exclude(respuesta__empleado=session_empleado).filter( fecha__gt=ahora_mismo).order_by('fecha')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
相关资源
最近更新 更多