2017-09-22 22 views
0

涉及到具体的外键的所有对象,我有以下models.py:检索在Django

//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的值。 在uid = 3的表userresp中有两条记录。怎么做?

回答

1

resps = userresp.objects.filter(uid_id=3)应该工作。 但是你的代码有一些问题。首先,类名应该是,大写驼峰。

试试这个:

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) 
3

首先,uid是不是该领域的好名字。 STH。像user是一个更好的适合,因为给定一个userresp(类名应该是骆驼大小写,顺便说一句)实例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()