2012-10-29 39 views
5

Giả sử tôi có một f trường trong mô hình của tôi được xác định như sau như một chìa khóa nước ngoài:Django lĩnh vực hậu tố ForeignKey với _id

f = models.ForeignKey(AnotherModel) 

Khi Django đồng bộ hóa cơ sở dữ liệu, các đệ tạo ra trong db sẽ được gọi f_id, tự động hậu tố với '_id'.

Vấn đề là tôi muốn trường này trong db được đặt tên chính xác như những gì tôi đã xác định trong mô hình, f trong trường hợp này. Làm thế nào tôi có thể đạt được điều đó?

Trả lời

11

Vâng, hóa ra có một đối số từ khóa được gọi là db_column. Nếu bạn muốn các lĩnh vực được gọi là 'f' trong cơ sở dữ liệu là chỉ đơn giản như:

f = models.ForeignKey(AnotherModel, db_column='f') 

Tham khảo thêm:

Tên của cột cơ sở dữ liệu để sử dụng cho lĩnh vực này. Nếu điều này không được đưa ra, Django sẽ sử dụng tên của trường.

Nếu tên cột cơ sở dữ liệu của bạn là từ dành riêng cho SQL, hoặc chứa ký tự không được phép trong tên biến Python - đáng chú ý là, dấu nối - OK. Django báo giá cột và tên bảng phía sau các cảnh.

https://docs.djangoproject.com/en/dev/ref/models/fields/#db-column

+1

Tôi nghĩ rằng bạn nên làm cho nó rõ ràng rằng tùy chọn trường db_column' 'này là cần thiết trong 'AnotherModel', có lẽ cùng với' primary_key = TRUE' mục 'f' lĩnh vực. – dschulz

+0

Cảm ơn @dschulz nhưng ý của bạn là gì bởi tùy chọn trường 'db_column' này là cần thiết trong 'AnotherModel''? Tôi không nghĩ rằng 'f' được gọi trong cơ sở dữ liệu có liên quan gì đến' AnotherModel', tôi có đúng không? –

+1

Rất tiếc! Tôi đã sai @Caperea, xin lỗi. Brainfart của tôi là về tên của cột khóa chính trong 'AnotherModel'. Bạn nói đúng, sử dụng tùy chọn trường 'db_column' trên trường' f' là đủ. – dschulz

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