【问题标题】:Django many-to-many return list of releated objectsDjango多对多返回相关对象列表
【发布时间】:2015-04-28 17:51:47
【问题描述】:

模型 Stuff 和模型 Thing 之间存在多对多关系。当 Stuff 转换为字符串时,我想返回组成它的事物列表。

class Thing(models.Model):
    name = models.CharField(max_length=50)

class Stuff(models.Model):
    things = models.ManyToManyField(Thing)

    def __str__(self):
        # Return comma delimited list of things that are related to self

我看到很多很多问题都可以通过使用stuff.thing.all() 来解决。如果我在事物上使用.get(),我该如何过滤 Stuff 的 ID?

【问题讨论】:

    标签: python django django-models


    【解决方案1】:
    class Stuff(models.Model):
        ...
    
        def __str__(self):
            return '-'.join([str(thing) for thing in self.things.all()])
    

    这将在打印Stuff 对象时打印thing1-thing2-thing3(您也应该在Thing 模型中定义__str__ 方法,否则它将打印Thing object-Thing object-Thing object)。

    如果你想通过Stuff ID过滤Thing对象,你可以这样做:

    Thing.objects.filter(stuff__id=yourIDHere)
    

    看看Django docs on lookups

    【讨论】:

    • 太棒了。一开始我有一个 TypeError 并且不得不做一个小的调整。 return '-'.join([str(thing.name) for thing in self.things.all()])
    • 你是对的!我错过了!我会在答案中编辑它以防其他人需要它。
    猜你喜欢
    • 2018-11-09
    • 2011-03-09
    • 2011-04-19
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    相关资源
    最近更新 更多