2011-07-13 26 views
9

Vì một số lý do hôm nay tôi không thể đổ cơ sở dữ liệu của mình bằng cách sử dụng python manage.py dumpdata hoặc từ liên kết có thể tải xuống tệp mysql.Khắc phục sự cố "Lỗi: Không thể tuần tự hóa cơ sở dữ liệu:" khi thực hiện dumpdata

Tôi đã cố sử dụng python manage.py dumpdata --traceback và đây là thông tin tôi có.

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 

Nó nói django.contrib.auth.models.DoesNotExist. Tôi tự hỏi nếu nó có cái gì đó để làm với một phím nước ngoài hoặc một cái gì đó.

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 

Từ models.py của tôi, người dùng lĩnh vực, datetime và lưu ý đã được thêm vào thời gian gần đây. Bây giờ, nếu cho một khách hàng, bất kỳ trường nào trong số này không có giá trị tức là trống, tôi sẽ gặp lỗi Unable to serialize database.

Khi tôi đã tra cứu người dùng, thời gian rảnh và ghi chú trong mysql. Bảng cho khách hàng hiển thị user_id, datetime và note để có giá trị Null (đó là những gì tôi muốn). Tại sao nó không cho phép các giá trị 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

vấn đề then chốt Ngoại âm thanh như một đặt cược tốt. Bất kỳ mô hình nào của bạn có các trường ForeignKey trỏ đến các mô hình trong 'django.contrib.auth.models'? – tcarobruce

+0

Tôi thứ hai @tcarobruce. Nghe có vẻ như một vấn đề quan trọng hoặc khóa ngoại. Tôi đã có những tình huống tương tự xảy ra vì thiếu các khóa hoặc các ràng buộc mà không được Nam hoặc bằng tay sửa đổi đúng cách. – Brandon

+1

'self.handle_fk_field (obj, field)' là một chút giveaway –

Trả lời

5

Bạn cần phải thông báo cho Django rằng nó nên cho phép giá trị NULL trên các trường được thêm gần đây. Nó chỉ nhìn vào định nghĩa trường, nó không lấy lược đồ từ cơ sở dữ liệu.

Lỗi self.field.rel.to.DoesNotExist có nhiều khả năng xảy ra khi khách hàng không có người dùng được liên kết và client.user được truy cập. Đó là bởi vì theo mặc định tất cả các trường được yêu cầu. Nếu bạn thay đổi định nghĩa mô hình của bạn như được hiển thị dưới đây, lỗi sẽ biến mất.

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 phép NULL tương ứng None giá trị trên một cánh đồng.
  • blank=True cho phép bạn để trống trường theo dạng mẫu (ví dụ: trong quản trị viên).

(blanknull đều False theo mặc định)

+0

Đã hoạt động! Cảm ơn – Shehzad009

Các vấn đề liên quan