2016-03-29 23 views
6

Sử dụng migrations, tôi cần phải thêm trường mới (khóa ngoại) vào mô hình. Tôi biết điều đó có thể được thực hiện với:Giá trị mặc định cho khóa ngoài trong di chuyển Django.AddField

migrations.AddField(
     model_name='MyModel', 
     name='state', 
     field=models.ForeignKey(null=True, related_name='mymodel_state', to='msqa_common.MyModelState'), 
    ), 

Tuy nhiên, tôi không muốn trường của tôi bị vô hiệu. Thay vào đó, tôi muốn sử dụng một giá trị mặc định cho nó, tương ứng với id của MyModelState có tên là "available" (giá trị id có thể thay đổi trong các máy khác nhau). Giá trị "sẵn có" của bảng MyModelState được chèn vào cơ sở dữ liệu trong một kịch bản di chuyển trước đó, vì vậy nó tồn tại.

Tôi đoán tôi nên làm điều gì đó như:

migrations.AddField(
     model_name='MyModel', 
     name='state', 
     field=models.ForeignKey(null=False, default=available_state_id, related_name='mymodel_state', to='msqa_common.MyModelState'), 
    ), 

Câu hỏi của tôi: Làm thế nào tôi có thể nhận được available_state_id trong kịch bản chuyển đổi của tôi?

Trả lời

16

Bạn không thể thực hiện trực tiếp. Cách được khuyến nghị để thực hiện điều này là tạo một di chuyển để thêm nó bằng null = True, sau đó thêm một di chuyển dữ liệu sử dụng Python hoặc SQL để cập nhật tất cả những cái hiện có để trỏ đến available_state_id, sau đó di chuyển thứ ba thay đổi nó thành null = Sai.

+0

Cảm ơn Daniel. Bạn có biết bất kỳ tài liệu nào mà quá trình này được giải thích không? – eelioss

+2

https://docs.djangoproject.com/en/1.9/howto/writing-migrations/#migrations-that-add-unique-fields –

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