2012-02-24 26 views
5

Tôi biết rằng thường Django sẽ tạo ra một chìa khóa nước ngoài gọi là user_id nếu tôi chỉ đơn giản là làm một cái gì đó giống nhưDjango: Làm thế nào để có một bội số phím nước ngoài tham chiếu cùng một bảng trong một bảng

from django.db import models 

class Order(models.Model): 
    user = models.ForeignKey(User) 
    comments = models.CharField(max_length=400) 
    date_created = models.DateTimeField('created date') 

class User(models.Model): 
    name = models.CharField(max_length=200) 
    age = models.IntegerField() 

nhưng những gì nếu tôi cần ba phím nước ngoài riêng biệt trong Order rằng tất cả các điểm đến User? Ba khóa ngoại sẽ là user_created, user_modifieduser_status.

+0

Bản sao có thể có của [Làm thế nào tôi có thể có hai khóa ngoại cho cùng một mô hình trong Django?] (Https://stackoverflow.com/questions/543377/how-can-i-have-two-foreign-keys-to -e-same-model-in-django) –

Trả lời

13

Các giải pháp thực sự là thẳng về phía trước:

class Order(models.Model): 
    user_status = models.ForeignKey(User, related_name = 'orders_status') 
    user_created = models.ForeignKey(User, related_name = 'orders_created') 
    user_modified = models.ForeignKey(User, related_name = 'orders_modified') 

Bạn chỉ cần xác định riêng biệt related_name s để tránh nhập nhằng khi truy cập vào theo thứ tự từ đối tượng người dùng.

+0

Ok, do đó, 'user' của bạn trong trường hợp này sẽ là' user_status'? Có một lý do tại sao bạn không sử dụng 'related_name' cho cái đầu tiên? – hobbes3

+0

Cái đầu tiên lấy tên liên quan mặc định và được truy cập thông qua 'user.order_set' - tất nhiên, người ta cũng có thể gán một tên liên quan tùy chỉnh ở đây. – alex

+0

... và vâng, người đầu tiên sẽ là user_status - tôi đã bỏ qua nó trong bài đăng của bạn và cập nhật câu trả lời của tôi – alex

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