Django模型属性

时间:2016-05-02 23:18:53

标签: python django class

当我尝试运行下面的代码时,Django说:" name' cards'没有定义。 "

class CardSet(models.Model):

    cards = Card.objects.all()

    def show_card(self):

        for card in cards:
            print(card)

但是如果我把代码放在这样的话,那就行了。

class CardSet(models.Model):

    def show_card(self):

        cards  = Card.objects.all()
        for card in cards :
            print(card)
你可以帮我解释一下吗?谢谢!

2 个答案:

答案 0 :(得分:0)

使用self.cards

访问它
def show_card(self):
    for card in self.cards:
        print (card)

修改:我看到了您的其他问题Relationships among these models in Django

如果你保持这种关系,只需使用相关的对象查询进行查询:

cards = models.ManyToManyField(Card) # Ref. this relationship

def show_card(self):
    for card in self.cards.all(): # <-- querying for cards related to this
                                  # CardSet object 
        print (card)

答案 1 :(得分:0)

如果这是您的代码(而不是发布的代码至少有一个语法错误):

class CardSet(models.Model):
    cards = Card.objects.all()
    def show_card(self):
        for card in cards:
            print(card)

这个有很多问题:

  1. 您不会使用Card.objects.all(),而是使用many2many字段。有关更多详细信息,请参阅文档。否则,您的方法将无法作为实例方法。
  2. 方法中的循环没有类的范围,因为该范围仅在您定义类时发生(在加载时发生,而不是在方法调用时发生)。
  3. 您的方法涉及self,或许您想要的引用是self.cards而不是cards
  4. 建议代码:

    class CardSet(modelsModel):
        cards = models.ManyToManyField(Card)
        def show_cards(self):
            for card in self.cards.all():
                print(card)
    

    OTOH如果cards只是一个类范围的查询集而不是m2m关系......

    class CardSet(modelsModel):
        cards = Card.objects.all()
        def show_cards(self):
            for card in self.cards:
                print(card)
    

    解决方案基本相同:添加self