这是我的模特:
class Post(models.Model): owner = models.ForeignKey(User, related_name="%(app_label)s%(class)s_set") post = models.CharField(max_length=400) class Meta: abstract = True class DS(Post): location = models.ForeignKey(Location, blank=True, null=True, related_name="%(app_label)s%(class)s_set") class Meta(Post.Meta): abstract = True class S(DS): # same as DS pass
现在,当我打开Python shell并执行此操作时:
a = User.objects.get(username='a') dir(a)
然后这两个出现:
['myapps_set', 's_set']
当我这样做时:
a.s_set.all()
它返回一个S
对象,但是当我这样做时:
a.myapps_set.all()
它返回三个S
对象(它返回的第一个S
对象与我返回的对象相同a.s_set.all()
.我的两个问题是,
1)为什么即使我特意做了owner = models.ForeignKey(User, related_name="%(app_label)s%(class)s_set")
,s_set
也可以用用户对象访问?
2)为什么他们会返回两组不同的对象(即如何myapps_set.all()
返回3(正确的答案)而s_set.all()
只返回一个?