Python 外键关系

Python 外键关系,python,django,foreign-keys,Python,Django,Foreign Keys,假设我有3个班,A,B,C class A(models.Model): comment = models.CharField(max_length=600, default="None") rating = models.IntegerField(default=1, choices=CHOICES, name='rating') date = models.CharField(max_length=50, default='nonee') class B(mode

假设我有3个班,A,B,C

class A(models.Model):
    comment = models.CharField(max_length=600, default="None")
    rating = models.IntegerField(default=1, choices=CHOICES, name='rating')
    date = models.CharField(max_length=50, default='nonee')


class B(models.Model):
    Aname = models.ForeignKey('A', related_name='AB')
    classC = models.ForeignKey('C', related_name='BC')

class C(models.Model)
    #some info
        def average_rating(self):
        return self.?????.all().aggregate(Avg('rating')).values()[0]

我是如何从我的
self
是一个对象的观点出发,一直回到a类,这样我就可以聚合
评级
数字。如果我理解正确的话,B类的全部意义就是成为一个显示关系的对象?我能够在两个类之间切换,但当第三个“关系”类出现时,我似乎无法让它工作

> P>当需要在记录集(QueSET)基础上执行操作而不是单个记录(模型)时,则应考虑

添加额外的管理器方法是向模型添加“表级”功能的首选方法。(对于“行级”功能,即作用于模型对象的单个实例的功能,使用模型方法,而不是自定义管理器方法。)


你根本不需要B班。你需要的是一个介于a和C之间的许多字段;这将在幕后创建一个类似于B的表,但除非您确实需要在该表上添加字段,否则最好不要显式定义它

在C上添加M2M后,您的
average_rating
方法可以直接使用它:

class C(models.Model)
    model_a_s = models.ManyToManyField('A')


    def average_rating(self):
        return self.model_a_s.all().aggregate(Avg('rating')).values()[0]

(请注意,您问题的标题有点混乱;此处根本没有任何视图。)

我无意中将标题从其他内容中留下,谢谢。我将在B类中添加其他字段。我将有一个D类(和一些其他类),它将使用a类的所有基础知识,然后我想在a类中添加其他字段。我想我只是想知道如何使用属于另一个类的类。我想我应该研究一下子类?