2016-05-18 25 views
7

Một thời gian trước, tôi đã tạo ra một mô hình Django:Django: Tạo dữ liệu thực địa sên cho các mục hiện có trong cơ sở dữ liệu

class Product(models.Model): 
    name = models.CharField(verbose_name=_('Nome'), max_length=100) 
    description = models.CharField(verbose_name=_('Descrizione'), blank=True, default="") 

Bây giờ tôi muốn chèn một lĩnh vực sên:

class Product(models.Model): 
    name = models.CharField(verbose_name=_('Nome'), max_length=100) 
    slug = AutoSlugField(populate_from='name', unique=True) 
    description = models.CharField(verbose_name=_('Descrizione'), blank=True, default="") 

Vấn đề của tôi là khi tôi tạo một di chuyển, Django yêu cầu tôi chèn một giá trị mặc định cho trường slug.

Ý tưởng của tôi là tạo một con sên trong khi di chuyển cho các mục nhập hiện có trong cơ sở dữ liệu, có cách nào để làm điều đó?

Cảm ơn!

+0

Liệu rằng 'AutoSlugField' một 'def ault' param? – Gocht

Trả lời

9

đây là mã tôi có cho cùng một tình huống.

models.py:

slug = AutoSlugField(null=True, default=None, unique=True, populate_from='name') 

Note null = True mà là tương thích với một lĩnh vực độc đáo Trong cuộc di cư của tôi, tôi đang bổ sung thêm một di chuyển dữ liệu bằng cách thủ công chỉnh sửa các tập tin chuyển đổi

0007_my_migration.py:

def migrate_data_forward(apps, schema_editor): 
    for instance in MyModel.objects.all(): 
     print "Generating slug for %s"%instance 
     instance.save() # Will trigger slug update 

def migrate_data_backward(apps, schema_editor): 
    pass 

class Migration(migrations.Migration): 
... 

    operations = [ 
     migrations.AddField(
      model_name='my_model', 
      name='slug', 
      field=autoslug.fields.AutoSlugField(null=True, default=None, editable=False, populate_from='name', unique=True), 
      preserve_default=False, 
     ), 
     migrations.RunPython(
      migrate_data_forward, 
      migrate_data_backward, 
     ), 
    ] 
+0

Cảm ơn! Điều này hoạt động hoàn hảo :) – markdesign

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