2013-01-06 30 views
8

Đây là câu hỏi đầu tiên của tôi vì vậy tôi sẽ đánh giá cao sự kiên nhẫn."không thể chuyển sang loại số nguyên" lỗi

Tôi đã thay đổi một vài thuộc tính thành IntegerField từ CharField. Dưới đây là mã:

rating_choices = (
    (1,"1"), 
    (2,"2"), 
    (3,"3"), 
    (4,"4"), 
    (5,"5"), 
) 

class Rating(models.Model): 
    article = models.ForeignKey(Article,null=True) 
    organization = models.IntegerField(choices=rating_choices, default=1) 
    support = models.IntegerField(choices=rating_choices, default=1) 
    readability = models.IntegerField(choices=rating_choices, default=1) 
    tags = models.IntegerField(choices=rating_choices, default=1) 
    comments = models.TextField() 
    def get_overall_rating(self): 
     return fsum(self.organization + self.support + self.support + self.readability + self.tags)/5.0 
    overall_rating = property(get_overall_rating) 
admin.site.register(Rating) 

Tôi đã làm một di cư về phía nam để di chuyển trên Postgres và đây là lỗi tôi nhận được:

Error in migration: collect_data:0010_auto__chg_field_rating_tags__chg_field_rating_support__chg_field_ratin 
Traceback (most recent call last): 
    File "manage.py", line 15, in <module> 
    execute_from_command_line(sys.argv) 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line 
    utility.execute() 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute 
    output = self.handle(*args, **options) 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/south/management/commands/migrate.py", line 108, in handle 
    ignore_ghosts = ignore_ghosts, 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/south/migration/__init__.py", line 213, in migrate_app 
    success = migrator.migrate_many(target, workplan, database) 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/south/migration/migrators.py", line 235, in migrate_many 
    result = migrator.__class__.migrate_many(migrator, target, migrations, database) 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/south/migration/migrators.py", line 310, in migrate_many 
    result = self.migrate(migration, database) 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/south/migration/migrators.py", line 133, in migrate 
    result = self.run(migration) 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/south/migration/migrators.py", line 107, in run 
    return self.run_migration(migration) 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/south/migration/migrators.py", line 81, in run_migration 
    migration_function() 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/south/migration/migrators.py", line 57, in <lambda> 
    return (lambda: direction(orm)) 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellow/jellow/apps/collect_data/migrations/0010_auto__chg_field_rating_tags__chg_field_rating_support__chg_field_ratin.py", line 13, in forwards 
    db.alter_column('collect_data_rating', 'tags', self.gf('django.db.models.fields.IntegerField')()) 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/south/db/generic.py", line 44, in _cache_clear 
    return func(self, table, *args, **opts) 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/south/db/generic.py", line 522, in alter_column 
    flatten(values), 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/south/db/generic.py", line 273, in execute 
    cursor.execute(sql, params) 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/django/db/backends/util.py", line 40, in execute 
    return self.cursor.execute(sql, params) 
    File "/Users/narensathiya/Documents/Documents/Jellow/Jellow/jellowenv/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 52, in execute 
    return self.cursor.execute(query, args) 
django.db.utils.DatabaseError: column "tags" cannot be cast to type integer 

Bất kỳ trợ giúp sẽ được nhiều đánh giá cao và cảm ơn bạn trước !!

+0

Có bất kỳ mặt hàng đã có trong 'cột tags' trong cơ sở dữ liệu của bạn mà không phải là dưới hình thức số nguyên ? –

+0

có, phải có. Tôi đã lưu một số giá trị dưới dạng ký tự. Tôi có phải xóa cột đó và làm lại không? – Badi8beach

Trả lời

17

nếu bạn đang hạnh phúc để vứt bỏ dữ liệu của bạn, bạn có thể xóa các cột và tạo ra một cái mới

nếu bạn muốn giữ lại dữ liệu của bạn, bạn cần phải hoặc

a) cung cấp cho cột mới của bạn một tên khác nhau, hoặc
b) tạo ra một cột tạm thời để giữ dữ liệu trong quá trình chuyển

sau đó bạn cần một chuỗi các cuộc di cư

  1. di chuyển giản đồ để thêm cột mới (hoặc tạm thời)
  2. di chuyển dữ liệu di chuyển dữ liệu một cách rõ ràng, thực hiện bất kỳ chuyển đổi bắt buộc nào (ví dụ: "A" -> 1)
  3. có thể là một di dân schema xóa cột tạm thời của bạn
+0

Cool I havent thực hiện di chuyển dữ liệu trước khi vì vậy tôi sẽ cố gắng mà ra! – Badi8beach

1

Bạn cần phải thêm "SỬ DỤNG (col_name :: integer)" để loại bỏ lỗi này. Nhưng trong trường hợp đó bạn phải sử dụng truy vấn trực tiếp.

migrateEngine.execute ('ALTER TABLE thử nghiệm ALTER COLUMN testScore LOẠI INTEGER SỬ DỤNG testScore :: integer')

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