2013-05-28 85 views
20

Tôi có một mô hình như thế này:Làm thế nào có thể thiết lập hai trường tiểu học trọng cho các mô hình của tôi trong django

class Hop(models.Model): 
    migration = models.ForeignKey('Migration') 
    host = models.ForeignKey(User, related_name='host_set') 

Tôi muốn di cư và tổ chức cả hai cùng nhau là chìa khóa chính.

+1

có thể trùng lặp http://stackoverflow.com/questions/4871966/make-primary-key-with-2-fields-in-django –

Trả lời

38

Tôi sẽ thực hiện điều này hơi khác.

Tôi sẽ sử dụng một khóa chính mặc định (lĩnh vực tự động), và sử dụng tài sản lớp meta, unique_together

class Hop(models.Model): 
    migration = models.ForeignKey('Migration') 
    host = models.ForeignKey(User, related_name='host_set') 

    class Meta: 
     unique_together = (("migration", "host"),) 

Nó sẽ hoạt động như một "người thay thế" cột khóa chính.

Nếu bạn thực sự muốn tạo một khóa chính đa cột, nhìn vào this app

+0

Nếu tôi sử dụng unique_together, điều đó có nghĩa là tôi không phải có một trường đặt làm khóa chính? – connor

+2

Nếu bạn không chỉ định một 'AutoField', django sẽ thêm một cho bạn. Vì vậy, trong ngắn hạn, bạn không. – karthikr

6

Hiện nay, mô hình Django chỉ hỗ trợ một cột duy nhất chính-key. Nếu bạn không cụ thể primary_key = True cho trường trong mô hình của mình, Django sẽ tự động tạo cột id làm khóa chính.

Thuộc tính unique_together trong lớp Meta chỉ là ràng buộc cho dữ liệu của bạn.