Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 追溯外键_Python_Django - Fatal编程技术网

Python 追溯外键

Python 追溯外键,python,django,Python,Django,我有以下表格: class Person (models.Model): GENDER_CHOICES = ( ('M', 'Male'), ('F', 'Female'), ) first_name = models.CharField(max_length=50) last_name = models.CharField(max_l

我有以下表格:

class Person (models.Model):

    GENDER_CHOICES = (
                      ('M', 'Male'),
                      ('F', 'Female'),
                      )

    first_name = models.CharField(max_length=50)
    last_name  = models.CharField(max_length=50)
    gender = models.CharField(max_length = 1, choices=GENDER_CHOICES, default='M')
    age = models.IntegerField()
    photo = models.ImageField(upload_to='uploads/images/runners', blank=True)

    def __unicode__(self):
        return '%s, %s' % (self.last_name, self.first_name)

我试图完成的是检索并随后编码一个JSON响应,该响应包含一个运行者实例列表,其中包含每个对应的Person实例的属性

在排行榜方法中,我编写了一个查询示例。执行后,我得到以下信息:

DEBUG: [{'person_id': 1, 'position': 1, 'id': 1, 'race_id': 1}, {'person_id': 2, 'position': 2, 'id': 2, 'race_id': 1}]
我希望它看起来像是让QuerySet用一个person实例和该实例的所有相关属性(例如,first_name、last_name等)展开(并替换)每个“person_id”字段

这可能吗?我尝试过使用prefetch_related()和select_related()两种方法,但都没有效果


一如既往,我们非常感谢您提供的任何帮助。

您可以通过以下方式获得比赛中的所有跑步者:

self.runner_set.select_related('person')
这将包含所有的跑步者,并且将有一个
连接到person表

当您使用
.values()
时,它会返回外键值,这不是您想要的


如果您愿意,您可以在外键中使用
related_name=“runners”
进行比赛。然后您可以通过
self.runners…

访问它。我不确定您使用related_name是否符合您的要求:Person.Person.all()->实例。您可能需要
related_name=“runners”
DEBUG: [{'person_id': 1, 'position': 1, 'id': 1, 'race_id': 1}, {'person_id': 2, 'position': 2, 'id': 2, 'race_id': 1}]
self.runner_set.select_related('person')