假设我有以下模型:
class User(models.Model):
pass
class A(models.Model):
user = models.ForeignKey(User)
class B(models.Model):
a = models.ForeignKey(A)也就是说,每个用户都拥有一些类型为A的对象,也拥有一些类型为B的对象。现在,我正在编写一个通用接口,它将允许用户查看它拥有的任何对象。在视图中,我当然不能说"objects = model.objects.filter(user=user)",因为B没有'user‘属性。在这里采取的最佳方法是什么?
发布于 2009-07-14 12:24:15
我的方法是简单地遍历B类上的对象'a‘。所以在视图中,我会这样做:
objects = B.objects.get(user=a.user)
objects += A.objects.get(user=user)我之所以这样做,是因为它们本质上是两个数据库查询,一个用于检索一组对象A,另一个用于检索一组对象B。我不确定在Django中是否可以检索两者的列表,这仅仅是因为数据库继承的工作方式。
您也可以使用model inheritance。这将是为对象A和B创建一个包含公共字段的基类,然后检索基类的列表,然后将其转换为正确的类型。
编辑:为了回应你的评论,我建议创建一个包含下面这行的基类:
user = models.ForeignKey(User)然后,类A和B可以从该基类继承,因此,您现在可以从该类中获取所有对象。假设您的基类名为“C”:
objects = C.objects.get(user=user)这将获得所有的C,然后您可以通过遍历对象中的每个对象并确定它们的类型来确定它们的具体类型:
for object in objects:
if object.A:
#code
if object.B:
#code https://stackoverflow.com/questions/1125006
复制相似问题