python+django:23、一对多及多对多的展示

本文介绍了在Django中如何处理一对多和多对多关系,特别是针对多对多关系,通过修改models.py文件将article表的作者字段设置为可输入多个作者,并在admin.py文件中调整显示方式,因list_display无法直接展示多对多字段,故采用函数输出的方式来呈现多对多关系的作者信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ManyToManyField(to)有一个必填的参数,to表示要关联的表

models.py文件:将之前的article表的作者字段修改为可以填多个作者

class Article(models.Model):
    '''文章'''
    title = models.CharField(max_length=30,verbose_name='标题')
    body = models.TextField(verbose_name='正文')
    auth = models.ManyToManyField(Users,verbose_name='作者')
    create_time = models.DateTimeField(auto_now_add=True,verbose_name='创建时间')
    update_time = models.DateTimeField(auto_now=True,verbose_name='最后更新时间')

    def __str__(self):
        # return self.__doc__+":"+self.title
        return "《" + self.title + "》"

    class Meta:
        verbose_name_plural='文章列表'

admin.py文件内容

list_display不能显示多对多,因此作者这里我们选择使用函数输出

class ControArticle(admin.ModelAdmin):
    list_display = ('title', 'zuozhe', 'create_time','update_time')
    ordering = ('id',)
    search_fields = ("title","body")
    list_per_page = 10
    filter_horizontal = ('auth',) #只显示作者,不显示别的用户
    # list_display_links = ('title','auth',)
    # list_editable = ('body',)
    # list_filter = ('auth',)
    # date_hierarchy = 'create_time' #按创建时间过滤选择
    def zuozhe(self,obj):
        return [a.name for a in obj.auth.all() ]

admin.site.register(models.Article,ControArticle)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值