在django中检索与特定外键相关的所有对象

时间:2017-09-22 18:00:47

标签: python django

我有以下models.py:

//models.py(code snippet)
class userresp(models.Model):

    uid=models.ForeignKey(settings.AUTH_USER_MODEL,blank=True,null=True)
    resp=models.CharField(max_length=20)
    datetime=models.DateTimeField(default=timezone.now)

    def __unicode__(self):
        return u"{} {}".format(self.uid,self.datetime)

    class Meta:
        db_table="userresp"

我想检索与特定uid = 3的值有关的所有“resp”。 表userstp中有两条记录,其中uid = 3。怎么做?

2 个答案:

答案 0 :(得分:3)

首先,uid对于该领域来说不是一个好名字。 STH。像user更合适,因为userresp(类名应该是驼峰,btw)实例respresp.uid会给你一个User 实例,而非其ID。你可以通过resp.uid_id获取id(这使得错误显而易见)。 无论如何,

resps = userresp.objects.filter(uid_id=3)

会奏效。如果你有User个实例,请使用fk字段的related_name,例如:

user = get_user_model().objects.get(id=3)
resps = user.userresp_set.all()

答案 1 :(得分:1)

resps = userresp.objects.filter(uid_id=3)应该有效。 但是您的代码存在一些问题。首先,类名应该是大写 CamelCase。

试试这个:

from django.contrib.auth.models import User

class UserResp(models.Model):

    user=models.ForeignKey(User, blank=True, null=True)
    resp=models.CharField(max_length=20)
    datetime=models.DateTimeField(default=timezone.now)

    def __unicode__(self):
        return u"{} {}".format(self.user.id, self.datetime)

然后你可以使用:

user = User.objects.get(pk=3)
resps = UserResp.objects.filter(user=user)