如何在绑定方法中获取实例名称?

时间:2018-06-12 10:19:15

标签: python django

我做了一个'俱乐部'课程和几个实例。然后我把学生作为俱乐部的外键。像这样。

在models.py

class Club(models.Model):
    club = models.CharField(max_length=30)
    def __str__(self):
        return self.club

class Student(models.Model):
    student = models.CharField(max_length=30)
    clubs = models.ManyToManyField(Club, related_name='inclubs')
    class_s = models.ForeignKey(Class, on_delete=models.CASCADE)
    isfilled = models.BooleanField(default=False)
    atclub = models.ForeignKey(Club, on_delete=models.CASCADE) 

    def __str__(self):
        return self.student

    def atclub(self):
        return self.atclub

我想让哪位俱乐部学生参与其中。所以我写了,

在我的results_view.html

  <head>
        <meta charset="UTF-8">
        <title>동아리 신청 확인</title>
    </head>
    <body>
    <ul>
        {% for student in a %}
        <div style="text-align:center">
        <li>{{student.student}}--{{student.atclub}}</li>
        </div>
        {% endfor %}
    </ul>
    <a href="{% url 'club:index'%}">Go to the main</a>
    </body>
    </html>

但结果是,

(网页浏览)

(student name)--<bound method Student.atclub of <student name>>

我想获得俱乐部名称而不是绑定方法。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

您没有atclub字段。您有一个atclub 方法,它取代了字段:

atclub = models.ForeignKey(Club, on_delete=models.CASCADE) 

def atclub(self):
    return self.atclub

第二个atclub名称取代了第一个;你不能兼得。调用atclub方法只会返回方法对象本身。

重命名其中一个,或完全删除该方法(似乎没有任何使用方法)。

答案 1 :(得分:1)

您无需定义方法。

def atclub(self):
    return self.atclub

由于atclub已经是属性,因此student.atclub可以正常工作。