Django 外键、多对多插入数据方法

models.py

class UserInfo(models.Model):
    username = models.CharField(max_length=64,db_column=‘username‘)
    passwd = models.CharField(max_length=64,db_column=‘password‘)
    register_date = models.DateTimeField(max_length=32,db_column=‘register_date‘)
    last_login_date = models.DateTimeField(max_length=32,db_column=‘last_login_date‘,null=True)

    class Meta:
        app_label = ‘simple‘
        db_table = ‘user_info‘

class ServerInfo(models.Model):
    hostname = models.CharField(max_length=32,db_column=‘hostname‘)
    port = models.IntegerField(max_length=32,db_column=‘port‘)
    status = models.CharField(max_length=32,db_column=‘status‘)

    class Meta:
        app_label = ‘simple‘
        db_table = ‘server_info‘

class Publisher(models.Model):
    name = models.CharField(max_length=32)
    address = models.CharField(max_length=32)
    state = models.CharField(max_length=32)
    nation = models.CharField(max_length=32)
    website = models.URLField(max_length=32)

class Author(models.Model):
    first_name = models.CharField(max_length=32)
    last_name = models.CharField(max_length=32)
    email = models.EmailField()

class Book(models.Model):
    title = models.CharField(max_length=32,unique=True)
    author = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    pubDate = models.CharField(max_length=32)

views.py

def addBook(request):
    if request.method == ‘POST‘:
        print("进入addbook post")
        print(request.POST)
        name = request.POST[‘name‘]
        author = request.POST.getlist(‘author‘)# 当获取多个数值的时候,使用getlist
        publisher = request.POST[‘publisher‘]
        p1 = Publisher.objects.get(id=publisher)#先在publisher表中查询出前端选中出版社对应的对象
        date = request.POST[‘publisherDate‘]
        b1 = Book(title=name,publisher=p1,pubDate=date)
        b1.save()#普通插入的数据和外键插入的数据需要先save()
        b1 = Book.objects.get(title=name)#查出书名对象,也就是获取要插入的多对多数据项
        if len(author) == 1:
            b1.author.add(author[0])#多对多使用add方法进行插入
            b1.save()
            return redirect("/displayBook/")
        elif len(author) == 0:#当用户没有选中作者
            return render(request,‘addBook.html‘,{"status":"添加出版社失败,没有选择作者"})
        else:#循环插入用户选中的多个作者
            for person in author:
                b1.author.add(person)#多对多使用add方法进行插入
            b1.save()
            return redirect("/displayBook/")
    print("进入addbook get")  #用户从库中获取页面可选的内容,get请求
    bookList = Book.objects.all()
    publisherList = Publisher.objects.all()
    authorList = Author.objects.all()
    print(bookList,publisherList,authorList)
    return render(request, ‘addBook.html‘,{‘books‘:bookList,
                                           ‘publishers‘:publisherList,
                                           ‘authors‘:authorList})

前端页面:

{% block head-menu %}
    <table border=1 style="margin-left:13%;margin-top: 3%;height: 30px;width: 1000px">
        <tr >
            <td>书名</td>
            <td>作者</td>
            <td>出版社</td>
            <td>出版日期</td>
        </tr>
        {% for book in books %}
            {% if forloop.counter|divisibleby:"2" %}
                <tr style="background-color: skyblue;">
                    <td>{{ book.title }}</td>
                    <td>{% for authorObj in book.author.select_related %} {{ authorObj.first_name }} {{ authorObj.last_name }} {% endfor %}</td>
                    <td>{{ book.publisher.name }}</td>
                    <td>{{ book.pubDate }}</td>
                </tr>
                </tr>
                </tr>
            {% else %}
                <tr style="background-color: salmon;">
                    <td>{{ book.title }}</td>
                    <td>{% for authorObj in book.author.select_related %} {{ authorObj.first_name }} {{ authorObj.last_name }} {% endfor %}</td>
                    <td>{{ book.publisher.name }}</td>
                    <td>{{ book.pubDate }}</td>
                </tr>
            {% endif %}
        {% endfor %}
    </table>
    <a href="/backend/"><button type="button" class="btn btn-primary btn-sm" style="margin-left: 43%;margin-top: 10%">返回</button></a>
{% endblock %}
时间: 2024-10-04 12:44:39

Django 外键、多对多插入数据方法的相关文章

django model 插入数据方法

需要插入的数据表结构如下: class UserInfo(models.Model): user_id =models.AutoField(primary_key=True) user_name=models.CharField(max_length=20,unique=True) depart=models.ForeignKey(DepartmentInfo) role=models.ManyToManyField(Role) *注:从上述类中可以看出UserInfo除了一般的表项外,还有有一

python42 1.外键的变种 2.数据表操作

昨日回顾: 一. 数据库的介绍   管理数据的软件 二. 数据库的 分类:   a.关系型数据库    有约束   b.非关系型数据库    没有约束     三. MySQl 的安装:   a. exe msi文件 点击下一步下一步      b. 压缩包     bin      mysqld : 启动mysql服务的     mysql  : 连接mysql    环境变量 四. 数据库(文件夹)   数据表 (文件)    数据行(文件行)  五. 数据库:   增:    create

MyEclipse数据库教程:表、外键和索引的使用方法

MyEclipse数据库教程:表.外键和索引的使用方法 MyEclipse的数据库资源管理器工具提供了大量的向导和操作,来轻松地创建和删除表.关系和索引.在本教程中,你将学习到: 创建和删除表 创建和删除外键 创建和删除索引 没有MyEclipse?立即下载 1. 创建一个新的索引 创建索引是开发人员重要的性能工具,典型的就是在DBMS上创建一个表的索引键.然而可能在其他领域中经常需要使用ORDER BY或WHERE子句来增强性能.假设您可能在CITY中有很多订购的客户,您可以在该领域中创建索引

C# 批量插入数据方法

批量插入数据方法 void InsertTwo(List<CourseArrangeInfo> dtF) { Stopwatch watch = new Stopwatch(); watch.Start(); DataTable dt = new DataTable();//准备存放数据的临时表 //构造表的列 dt.Columns.Add("ShoppingCartID"); dt.Columns.Add("Produce_ID"); dt.Colum

数据库设计中一对一、多对一、多对多关系依据外键的实现条件及方法

作者:二歪求知iSk2y链接:https://www.jianshu.com/p/2b27c7ba0653来源:简书 下面以departments和staff_info表为例(为staff_info添加指向departments的外键) 一个表的字段作为外键的条件: 列值必须非空且唯一 测试例子如下: mysql> create table departments (dep_id int(4),dep_name varchar(11)); Query OK, 0 rows affected (0

django 外键操作

下面定义两个模型,一个主表,一个字表. 举例说明: 如何通过主表对象找到对应的子表对象? 如何通过子表对象找到对应的主表对象? class Person(models.Model); name = models.CharField('作者姓名', max_length=10) age = models.IntegerField('作者年龄') class Book(models.Model): person = models.ForeignKey(Person,related_name='per

MySQL 如何删除有外键约束的表数据

-- 禁用外键约束 SET FOREIGN_KEY_CHECKS=0; -- 删除数据 truncate table stockTBL; -- 启动外键约束 SET FOREIGN_KEY_CHECKS=1; -- 查看当前FOREIGN_KEY_CHECKS的值,可用如下命令: SELECT @@FOREIGN_KEY_CHECKS;

mysql外键约束的两种方法

3.添加外键的语法: 有两种方式: 方式一:在创建表的时候进行添加 方式二:表已经创建好了,继续修改表的结构来添加外键 [方式一]在创建表的时候进行添加 [CONSTRAINT symbol] FOREIGN KEY [id] (从表的字段1) REFERENCES tbl_name (主表的字段2) [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}] [ON UPDATE {RESTRICT | CASCADE | SET NULL 

如何在DJANGO里,向有外键(一对多和多对多)的DB里插入数据?

需要插入的数据表结构如下: [python] view plaincopy class UserInfo(models.Model): user_id =models.AutoField(primary_key=True) user_name=models.CharField(max_length=20,unique=True) depart=models.ForeignKey(DepartmentInfo) role=models.ManyToManyField(Role) *注:从上述类中可