2011-07-13 16 views
9

Por alguna razón, hoy no puedo volcar mi base de datos usando python manage.py dumpdata o desde un enlace que puede descargar el archivo mysql.Solución de problemas "Error: no se puede serializar la base de datos:" al realizar dumpdata

Intenté usar python manage.py dumpdata --traceback y aquí está la información que tengo.

Traceback (most recent call last): 
    File "manage.py", line 11, in <module> 
    execute_manager(settings) 
    File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 438, in execute_manager 
    utility.execute() 
    File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 379, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line 191, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line 220, in execute 
    output = self.handle(*args, **options) 
    File "/usr/local/lib/python2.7/site-packages/django/core/management/commands/dumpdata.py", line 114, in handle 
    use_natural_keys=use_natural_keys) 
    File "/usr/local/lib/python2.7/site-packages/django/core/serializers/__init__.py", line 91, in serialize 
    s.serialize(queryset, **options) 
    File "/usr/local/lib/python2.7/site-packages/django/core/serializers/base.py", line 48, in serialize 
    self.handle_fk_field(obj, field) 
    File "/usr/local/lib/python2.7/site-packages/django/core/serializers/python.py", line 48, in handle_fk_field 
    related = getattr(obj, field.name) 
    File "/usr/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 301, in __get__ 
    raise self.field.rel.to.DoesNotExist 
django.contrib.auth.models.DoesNotExist 

Dice django.contrib.auth.models.DoesNotExist. Me pregunto si tiene algo que ver con una clave Extranjera o algo así.

models.py

class Client(models.Model): 
    name = models.CharField(max_length = 40) 
    telephone = models.CharField(max_length = 20) 
    website = models.URLField(verify_exists = False) 
    fax = models.CharField(max_length = 20) 
    email = models.EmailField() 
    is_active = models.BooleanField() 
    user = models.ForeignKey(User) 
    datetime = models.DateTimeField(default=datetime.now) 
    note = models.TextField() 
    def __unicode__(self): 
     return self.name 

Desde mi models.py, el usuario de campo, de fecha y hora y la nota se añadieron recientemente. Ahora bien, si para un cliente, cualquiera de estos campos no tiene un valor, es decir, en blanco, obtendré el error Unable to serialize database.

Cuando he buscado usuario, fecha y nota en mysql. La tabla para Cliente muestra user_id, datetime y note para tener valores nulos (que es lo que quiero). ¿Por qué no permite valores nulos?

 
+-----------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-----------+--------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| name  | varchar(40) | NO |  | NULL |    | 
| telephone | varchar(20) | NO |  | NULL |    | 
| website | varchar(200) | NO |  | NULL |    | 
| fax  | varchar(20) | NO |  | NULL |    | 
| email  | varchar(75) | NO |  | NULL |    | 
| is_active | tinyint(1) | NO |  | NULL |    | 
| user_id | int(11)  | YES | MUL | NULL |    | 
| datetime | datetime  | YES |  | NULL |    | 
| note  | longtext  | YES |  | NULL |    | 
+-----------+--------------+------+-----+---------+----------------+ 
+0

cuestión clave Exteriores suena como una buena apuesta. ¿Alguno de sus modelos tiene campos ForeignKey apuntando a modelos en 'django.contrib.auth.models'? – tcarobruce

+0

I segundo @tcarobruce. Suena como una clave foránea o problema de restricción. He tenido situaciones similares por falta de claves o restricciones que no fueron modificadas por South o manualmente. – Brandon

+1

'self.handle_fk_field (obj, field)' es un poco de un sorteo –

Respuesta

5

Debe decirle a Django que debe permitir valores NULOS en los campos agregados recientemente. Se ve solo en la definición de campos, no busca el esquema de la base de datos.

El error self.field.rel.to.DoesNotExist es más probable que aparezca cuando un cliente no tiene un usuario asociado y se accede al client.user. Es porque por defecto todos los campos son obligatorios. Si cambia la definición de su modelo como se muestra a continuación, el error debería desaparecer.

class Client(models.Model): 
    # ... 
    user = models.ForeignKey(User, 
          null=True, blank=True) 
    datetime = models.DateTimeField(default=datetime.now, 
          null=True, blank=True) 
    note = models.TextField(null=True, blank=True) 
  • null=True permite NULL respectivamente None valores en un campo.
  • blank=True le permite dejar el campo vacío en un formulario modelo (por ejemplo, en el administrador).

(blank y null son tanto False por defecto)

+0

¡Funcionó! Gracias – Shehzad009

Cuestiones relacionadas