多对多关联表中字段如何取值


发布时间:2019-10-02 03:22    作者: 晖哥哥   已过去:2 年,10 月   阅读总量:1453 已被赞:0


有两张表:

class School(models.Model):
    nanme = models.CharField(max_length=100)
    c_time = models.DateField(auto_now_add=True)

class Grade_class(models.Model):
    name = models.CharField(max_length=100)
    c_time = models.DateTimeField(auto_now_add=True)
    school = models.ManyToManyField(to='school',related_name='school')
    user = models.CharField(max_length=100)
    def __str__(self):
        return self.name
    class Meta:  # 后台管理显示汉字,这里必须用Meta
        ordering = ['-pk']  # 按修改时间倒序排列

现在需要通过年级表取到每个年级所关联到的学校的名字,并全部展现在后台,该如何呢?

用for 循环两次:

如果是在后台,就这样:

grades = Grade_class.objects.order_by('-pk')
#多对多要进行双迭代擦可以拿到值
for i in grades:
   for m in i.school.all():
        print(m.nanme)

如果是在前端页面就这样:

{% for grade in grades %}
      <tr>
          <th scope="row">{{ forloop.counter }}</th>
             <td> {{ grade.name }} </td>
             <td> {{ i.nanme}} </td>
            {% endfor %}
             <td> {{ grade.user }} </td>
             <td> {{ grade.c_time}} </td>
        </tr>
{% endfor %}

如果是要在django admin后台中要显示多对多关联字段的值,我们可以写个方法:

 

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    # 显示多对多字段
    # 定义一个方法,遍历book的authors,然后用列表返回
    def show_all_author(self, obj):
        return [a.name for a in obj.authors.all()]

    list_display = ['title', 'publisher', 'show_all_author']  # 用刚刚定义的方法的返回值替换authors的值
 

点赞

0




登陆后方可评论