Python 外键关系
假设我有3个班,A,B,CPython 外键关系,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
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类中添加其他字段。我想我只是想知道如何使用属于另一个类的类。我想我应该研究一下子类?