2015-01-20 14 views
5

Tôi Tring một số như thế này:quan ForeignKey đến lớp trừu tượng

class F(models.Model): 
    class Meta: 
     abstract = True 

class C1(F): 
class C2(F): 

class D(F): 
     pid = models.ForeignKey(Cx) 

nơi Cx có thể là một trong hai C1 hay C2, nhưng tôi không biết làm thế nào làm điều đó.

ai cũng có thể dẫn dắt tôi không? Cảm ơn

Python 3.3 Django 1,7

Trả lời

2

gì bạn đang yêu cầu không thể trực tiếp, bạn không thể có một ForeignKey đến một mô hình trừu tượng, như các mô hình trừu tượng không có bảng cơ sở dữ liệu liên kết đến.

Bạn có thể thực hiện một trong hai điều. Hoặc là làm cho một lớp bê tông F, có một số nhược điểm này, nhưng nó không phải là một cách xấu để đi.

class F(models.Model): 
    pass 

class C1(F): 
    pass 
class C2(F): 
    pass 

class D(F): 
     pid = models.ForeignKey(F) 

Hoặc sử dụng GenericforeignKey phức tạp hơn một chút, đặc biệt nếu bạn cần giới hạn lựa chọn mô hình.

1

Như đã đề cập trong thư trả lời khác, vì lớp trừu tượng không có bảng, bạn không thể liên quan đến chúng.

Bạn có thể, tuy nhiên, bắt chước hành vi này với các mối quan hệ one-to-one:

class F(models.Model): 
    pass # stuff here 

class C1(models.Model): 
    f = models.OneToOneField(F) 

class C2(models.Model): 
    f = models.OneToOneField(F) 

class D(F): 
     pid = models.ForeignKeyField(F) 

Bạn sẽ phải tự tìm thấy nếu pid là C1 hay C2, nhưng bạn sẽ không bao giờ có một kịch bản mà một cá thể đơn của F có liên quan đến nhiều trường hợp của C1 hoặc C2.

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