web-dev-qa-db-fra.com

Comment insérer des données dans la base de données Django à partir du fichier views.py?

Comment puis-je insérer des données dans ma base de données Django à partir d'une fonction dans le fichier vues, py? python manage.py Shell la seule façon d'insérer?

Pour plus d'explications que j'utilise:

  • python 3.4
  • Django 1.8.2
  • PyMySQL

Par exemple:

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

à partir de niloofar.views importation envoyer

url (r '^ index /', envoyer),

Je veux que lorsque l'index de page est chargé, la fonction d'envoi fonctionne et insère des données dans la base de données.

Ça ne marche pas. Cela ne donne aucune erreur et rien ne s'est produit lorsque j'ai actualisé la page d'index, rien n'a été envoyé à la base de données. Je pense qu'il y a une erreur de syntaxe, dans la façon dont j'essaie d'insérer des données.

Permettez-moi de remarquer que même lorsque je lance python manage.py Shell puis:

de books.models import Publisher

p = éditeur (nom = 'Apress', ville = 'Berkeley')

p.save ()

rien ne sera inséré dans la base de données Django.

10
niloofar

Votre question n'est pas très claire. Vous devriez probablement passer par le Django-tutorial .

Mais bien sûr, vous pouvez insérer des données dans la base de données à partir des vues. Supposons que vous ayez un modèle appelé 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')
19
ilse2005

Vous pouvez simplement créer une instance de l'un de vos modèles et l'enregistrer. Supposons que vous ayez un modèle d'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))
11
Kristof Claes

vous pouvez essayer ceci:

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