2011-07-13 19 views
9

今日、何らかの理由でpython manage.py dumpdataまたはmysqlファイルをダウンロードできるリンクからデータベースをダンプできません。トラブルシューティング「エラー:データベースをシリアライズできません:」dumpdataを実行するとき

私はpython manage.py dumpdata --tracebackを使用しようとしましたが、ここには私の情報があります。

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 

django.contrib.auth.models.DoesNotExistと書かれています。私はそれが外国のキーか何かと関係があるのだろうかと思います。私のmodels.pyから

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 

は、フィールドのユーザー、日時やノートが最近追加されました。クライアントの場合、これらのフィールドに値が空白でない場合は、エラーUnable to serialize databaseが表示されます。

私はユーザ、日時、およびmysqlを参照しています。 Clientのテーブルには、user_id、datetime、およびnoteがNull値を持つことが示されています(これは、私が望むものです)。なぜNull値を許可しないのですか?

 
+-----------+--------------+------+-----+---------+----------------+ 
| 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

外国重要な問題は良い賭けのような音(blanknullは、デフォルトでは、両方のFalseです)。どのモデルにも 'django.contrib.auth.models'のモデルを指すForeignKeyフィールドがありますか? – tcarobruce

+0

I second @tcarobruce。外部キーや制約の問題のように思えます。私は似たような状況が発生しました。これは、キーや制約が不足しているために、南または手によって正しく修正されなかったためです。 – Brandon

+1

'self.handle_fk_field(obj、field)'はちょっとしたプレゼントです –

答えて

5

最近追加されたフィールドにNULL値を許可する必要があることをDjangoに伝える必要があります。フィールド定義のみを調べ、データベースからスキーマをフェッチしません。

self.field.rel.to.DoesNotExistエラーは、クライアントに関連付けられたユーザーがなく、client.userにアクセスしたときに発生する可能性が最も高いです。デフォルトでは、すべてのフィールドが必須であるためです。次のようにモデル定義を変更すると、エラーは消えてしまいます。

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フィールドにNULLそれぞれNone値を可能にします。
  • blank=Trueは、モデルフォーム (たとえば、管理者)のフィールドを空のままにすることができます。

+0

それは働いた!ありがとう – Shehzad009

関連する問題