如何从views.py文件将数据插入django数据库?

Posted

技术标签:

【中文标题】如何从views.py文件将数据插入django数据库?【英文标题】:How to insert data to django database from views.py file? 【发布时间】:2016-06-06 17:40:58 【问题描述】:

如何从views.py 文件中的函数向我的django 数据库插入数据? python manage.py shell是唯一的插入方式吗?

关于我正在使用的更多解释:

python 3.4 django 1.8.2 Pymysql

例如:

models.py:

from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    city = models.CharField(max_length=60)

views.py:

from django.http import HttpResponse
import pymysql
from books.models import Publisher

def send(request):
    p = Publisher(name='Apress', city='Berkeley')
    p.save()

urls.py

从 niloofar.views 导入发送

url(r'^index/', 发送),

我希望在加载页面索引时,发送函数工作并将数据插入数据库。

它不起作用。它没有给出任何错误,当我刷新索引页面时也没有发生任何事情,没有任何内容发送到数据库。我认为在我尝试插入数据的方式上存在语法错误。

让我注意到,即使我运行python manage.py shell then:

从 books.models 导入出版商

p = Publisher(name='Apress', city='Berkeley')

p.save()

不会向 django 数据库插入任何内容。

【问题讨论】:

当然,shell 不是写入数据库的唯一方法,那有什么意义呢?在任何情况下,本教程都会向您展示如何做到这一点;请仔细阅读。 欢迎来到***,'***.com/questions/35472057/…'先开始使用django教程。 仅仅写“它不起作用”是不够的。究竟发生了什么?它与您的期望有何不同?您收到任何错误消息吗?他们说什么?从您的代码示例中,您似乎忘记命名视图(def (request): 行中的括号前应该有一个名称) 【参考方案1】:

你的问题很不清楚。您可能应该通过django-tutorial。

但请确保您可以从视图中将数据插入数据库。假设您有一个名为 Foo 的模型:

models.py

class Foo(models.Model):
    name = models.CharField(max_length=100)

view.py

from .models import Foo

def some_name(request):
    foo_instance = Foo.objects.create(name='test')
    return render(request, 'some_name.html.html')

【讨论】:

使用publisher_instance = Publisher.object.create(name='test') 显示此错误type object 'Publisher' has no attribute 'object' 对不起,有一个错字。它应该是Publisher.objects.create(name='test')(对象不是对象)。我编辑了我的答案 我尝试了def send(request): publisher_instance = Publisher.objects.create(name='tux') return HttpResponse("done") 并在页面中打印了“完成”字样,但没有任何内容发送到 db 嗯,我不知道是怎么回事,但重启系统后它工作了,谢谢。 @niloofar,如果回答对你有帮助,请采纳。谢谢!【参考方案2】:

您可以只创建一个模型的实例并保存它。假设您有一个 Article 模型:

from django.http import HttpResponse
from django.template import loader

from .models import Article


def index(request):
    article = Article()
    article.title = 'This is the title'
    article.contents = 'This is the content'
    article.save()

    template = loader.get_template('articles/index.html')
    context = 
        'new_article_id': article.pk,
    
    return HttpResponse(template.render(context, request))

【讨论】:

【参考方案3】:

一个简单的方法是使用 create 函数。通过提及字段名称及其值。下面的图解代码帮助您将数据从views.py插入到您的数据库中,并将数据库的内容显示到html页面中。

假设我们有一个看起来像这样的表

Name      Age     Marks
Bunny      4       10
Tanishq    12      12

models.py 看起来像这样

from django.db import models

# Create your models here.
class Student(models.Model):

    student_name = models.CharField(max_length = 120)
    student_age = models.IntegerField()
    student_marks = models.IntegerField()

所以 views.py 看起来像

from django.shortcuts import render
from .models import Student    # Student is the model class defined in models.py

# Assuming the data to be entered is presnet in these lists
stud_name = ['Aman', 'Vijay']
stud_age = [13, 12]
stud_marks = [20, 22]

def my_view(request, *args, **kwargs):
    
    # Iterate through all the data items
    for i in range(len(stud_name)):

        # Insert in the database
        Student.objects.create(Name = stud_name[i], Age = stud_age[i], Marks = stud_marks[i])


    # Getting all the stuff from database
    query_results = Student.objects.all();

    # Creating a dictionary to pass as an argument
    context =  'query_results' : query_results 

    # Returning the rendered html
    return render(request, "home.html", context)


下面应该是显示所有输入数据的home.html文件

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>

<body>
<h1>HOME</h1>

<table>
    <tr>
        <th>Name</th>
        <th>Age</th>
        <th>Marks</th>
      
    </tr>
    % for item in query_results %
        <tr> 
            <td> item.student_name </td>
            <td> item.student_age </td>
            <td> item.student_marks </td>
            
        </tr>
    % endfor %
</table>

</body>
</html>


插入需要更改以下内容,否则会出现类型错误

Student.objects.create(stud_name = stud_name[i], stud_age = stud_age[i], stud_marks = stud_marks[i])

【讨论】:

【参考方案4】:

你可以试试这个:

def myFunction(request):
    myObj = MyObjectType()
    myObj.customParameter = parameterX
    ...
    myObj.save()

【讨论】:

以上是关于如何从views.py文件将数据插入django数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何将csv文件输入Django [关闭]

使用JavaScript Onclick Event将数据传递给Django中的views.py?

Django:如何通过views.py更改值

Django note

如何通过 Ajax jQuery 将简单数据发送到 Django 中的views.py?

django-创建数据库文件的方法