Django: 由于添加人物信息的时候可以添加书籍信息的报错

在数据库一对多关系中,一本书中有多个人物,因此是一对多关系,外键放入多的一边,也就是人物属性中,当为了添加书信息的时候可以添加人物信息时,创建HeroInline类时model=人物类并加入书籍的admin类中,这样就完成了添加书信息的时候可以添加人物信息;
如果想要添加人物信息的时候可以添加书籍信息给书籍类中添加外键属性是会报错的,一对多关系不可以添加2个外键,如果使用多对多关系另有他法。

数据库代码如下:

from django.db import models
class Book(models.Model):
    # 默认会有主键, 为id并且自增
    # 书籍名称: 字符串区域
    btitle = models.CharField(max_length=50,verbose_name='书籍名称')
    # 书籍的出版日期, 相当于datetime.date.today()
    bpub_date = models.DateField(verbose_name='出版时间')
    def __str__(self):
        return  '%s' %(self.btitle)
    class Meta:
        db_table='books'
        verbose_name='图书信息'
        verbose_name_plural='图书信息'
class bHero(models.Model):
    hname = models.CharField(max_length=30,verbose_name='姓名')
    # 0: 男  1:女
    hgender = models.BooleanField(verbose_name='性别')
    hcontent = models.CharField(max_length=30,verbose_name='人物详情')
    hbook = models.ForeignKey('Book', on_delete=False,verbose_name='所属书籍')
    def sex(self):
        if self.hgender:
            return '男'
        else:
            return '女'
    def __str__(self):
        return '%s' % (self.hname)

    class Meta:
        db_table = 'heros'
        verbose_name='人物信息'
        verbose_name_plural='人物信息'

django自动生成后台增删改查功能中admin.py内容如下:

class HeroInline(admin.StackedInline): #增加图书信息时可以嵌套增加人物信息
    model = bHero
    extra = 2

class BookAdmin(admin.ModelAdmin):
    list_display = ['id','btitle','bpub_date']
    search_fields = ['btitle']
    list_filter = ['btitle']
    list_per_page = 2
    fieldsets = [
        ('基础信息',{'fields':['btitle']}),('详细信息',{'fields':['bpub_date']})
    ]
    inlines = [HeroInline] #一本书可以有多个人物
class HeroAdmin(admin.ModelAdmin):
    list_display = ['id','hname','sex','hcontent']
    search_fields = ['hname']
    list_filter = ['hname']
    list_per_page = 2
    fieldsets = [
        ('基础信息',{'fields':['hname','hgender']}),('详细信息',{'fields':['hcontent']})
    ]

admin.site.register(Book,BookAdmin) #后台管理书籍
admin.site.register(bHero,HeroAdmin) #后台管理人物
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值