2011-05-13 2 views
0

homme je passe ces valeurs de la fonction au modèle db comme:intégrité Erreur

Définition Fonction:

def send_as_notification_to(person , link_id , unique_content , which_app, notification_type): 

     nc = NotificationContent.objects.create(link_id = link_id , unique_content = str(unique_content)) 
     app_obj = MetaAppNames.objects.create(name = which_app) 
     nt = NotificationType.objects.create(type = notification_type , app = app_obj) 
     notification = Notification(person = person) 
     notification.content = nc 
     notification.notification_type = nt 
     notification.save() 
     nc.save() 
     app_obj.save() 
     nt.save() 

Appel vue:

def crave_form(request): 
    if request.method == 'POST': 
     form = IcraveForm(request.POST) 
     if form.is_valid(): 
      crave = form.save(commit = False) 
      crave.person = request.user 
      send_as_notification_to('admin' ,crave.id , crave.person , 'icrave' , 'crave') 
      crave.save() 
    else: 
     form = IcraveForm() 
    return render(request, 'icrave/form.html', { 'form' : form}) 

mais il me donne erreur:

notification_notificationcontent.link_id ne peut pas être NULL

Traceback ::

Environment: 


Request Method: POST 
Request URL: http://localhost:8000/icrave/create/ 

Django Version: 1.3 
Python Version: 2.7.1 
Installed Applications: 
['django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.comments', 
'ec.kiosk', 
'ec.chakra', 
'ec.ajax', 
'ec.broadcast', 
'ec.connect', 
'ec.seek', 
'ec.feed', 
'ec.ec_model', 
'ec.info', 
'ec.domains', 
'ec.souk', 
'ec.meta', 
'ec.shastra', 
'ec.chat', 
'ec.log', 
'ec.icrave', 
'ec.notification', 
'doj', 
'django.contrib.admin'] 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Traceback: 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 
File "/Volumes/Disk2/workspace/ec/ec/icrave/views.py" in crave_form 
    15.    send_as_notification_to('admin' ,crave.id , crave.person , 'icrave' , 'crave') 
File "/Volumes/Disk2/workspace/ec/ec/notification/api.py" in send_as_notification_to 
    6.   nc = NotificationContent.objects.create(link_id = link_id , unique_content = str(unique_content)) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/manager.py" in create 
    138.   return self.get_query_set().create(**kwargs) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/query.py" in create 
    360.   obj.save(force_insert=True, using=self.db) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/base.py" in save 
    460.   self.save_base(using=using, force_insert=force_insert, force_update=force_update) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/base.py" in save_base 
    553.      result = manager._insert(values, return_id=update_pk, using=using) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/manager.py" in _insert 
    195.   return insert_query(self.model, values, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/query.py" in insert_query 
    1436.  return query.get_compiler(using=using).execute_sql(return_id) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql 
    791.   cursor = super(SQLInsertCompiler, self).execute_sql(None) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql 
    735.   cursor.execute(sql, params) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/backends/util.py" in execute 
    34.    return self.cursor.execute(sql, params) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py" in execute 
    234.    return Database.Cursor.execute(self, query, params) 

Exception Type: IntegrityError at /icrave/create/ 
Exception Value: notification_notificationcontent.link_id may not be NULL 

Répondre

0

Lorsque vous appelez votre fonction, vous avez commis votre objet (crave) à la base de données. S'il possède un identifiant généré par la base de données pour la propriété id, il sera toujours NULL. Et c'est cette valeur de propriété id qu'il essaie d'utiliser pour le link_id dont il se plaint.

Vous devez soit arrêter de spécifier commit=False, soit appeler crave.save avant d'appeler votre fonction.

0

commit=False signifie que vous n'avez encore rien enregistré, ce qui signifie que le modèle n'a pas encore d'ID valide. Enregistrez d'abord le réel, puis transmettez l'ID du modèle mis à jour.

Questions connexes