2012-06-26 23 views
48

Giả sử tôi có mô hình này:Tôi có thể tạo ForeignKey cho cùng một kiểu trong django không?

class Task(models.Model): 
    title = models.CharField() 

Bây giờ tôi muốn rằng một công việc có thể liên quan đến công việc khác. Vì vậy, tôi muốn làm điều này:

class Task(models.Model): 
    title = models.CharField() 
    relates_to = ForeignKey(Task) 

tuy nhiên tôi có lỗi tuyên bố rằng Nhiệm vụ được ghi chú được xác định. Đây có phải là "hợp pháp", nếu không, tôi nên làm điều gì đó tương tự như vậy?

+0

Nếu bạn không muốn 'relates_to' liên kết đến bản thân, xem http://stackoverflow.com/q/37946885/247696 – Flimm

Trả lời

93
class Task(models.Model): 
    title = models.CharField() 
    relates_to = models.ForeignKey('self') 

https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey

+1

chính xác chỉ là một vài giây nhanh hơn :-) –

+0

ý tưởng tốt với sử dụng ' self' thay vì 'Task'! –

+1

Giả sử tôi sử dụng một cái gì đó như thế này và muốn xóa Công việc. Vì mỗi cá thể nhiệm vụ có một khóa ngoại lệ cho một thể hiện nhiệm vụ khác, nếu tôi xóa một cá thể nhiệm vụ, Django sẽ tự động xóa các lần xóa để nó tự động xóa bất kỳ cá thể tác vụ nào trỏ đến nhiệm vụ mà tôi vừa xóa? Nói cách khác, CASCADE DELETE vẫn hoạt động trong cùng một mô hình? – Marc

15

Yea bạn có thể làm điều đó, hãy ForeignKey thuộc tính một chuỗi:

class Task(models.Model): 
    title = models.CharField() 
    relates_to = ForeignKey('Task') 

Trong chiều sâu, bạn có thể tham khảo cũng chéo mô hình của một ứng dụng bằng cách sử dụng các ký hiệu dấu chấm, ví dụ

class Task(models.Model): 
    title = models.CharField() 
    relates_to = ForeignKey('<app_name>.Task') # e.g. 'auth.User' 
Các vấn đề liên quan