首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django中的通用对象"ownership“

Django中的通用对象"ownership“
EN

Stack Overflow用户
提问于 2009-07-14 12:18:09
回答 1查看 340关注 0票数 1

假设我有以下模型:

代码语言:javascript
复制
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‘属性。在这里采取的最佳方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-14 12:24:15

我的方法是简单地遍历B类上的对象'a‘。所以在视图中,我会这样做:

代码语言:javascript
复制
objects = B.objects.get(user=a.user)
objects += A.objects.get(user=user)

我之所以这样做,是因为它们本质上是两个数据库查询,一个用于检索一组对象A,另一个用于检索一组对象B。我不确定在Django中是否可以检索两者的列表,这仅仅是因为数据库继承的工作方式。

您也可以使用model inheritance。这将是为对象A和B创建一个包含公共字段的基类,然后检索基类的列表,然后将其转换为正确的类型。

编辑:为了回应你的评论,我建议创建一个包含下面这行的基类:

代码语言:javascript
复制
user = models.ForeignKey(User)

然后,类A和B可以从该基类继承,因此,您现在可以从该类中获取所有对象。假设您的基类名为“C”:

代码语言:javascript
复制
objects = C.objects.get(user=user)

这将获得所有的C,然后您可以通过遍历对象中的每个对象并确定它们的类型来确定它们的具体类型:

代码语言:javascript
复制
for object in objects:
    if object.A:
        #code
    if object.B:
        #code   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1125006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档