Cho phép nói rằng tôi có những mô hình cơ sở này:Django mô hình đa hình với unique_together
class Trackable(PolymorphicModel):
uuid = UUIDField(unique=True)
created_by = models.ForeignKey(settings.AUTH_USER_MODEL)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Và một mô hình con mở rộng nó:
class Like(Trackable):
content = models.ForeignKey(Content, related_name='likes')
class Meta:
unique_together = ['content', 'created_by']
Khi tôi chạy di cư, nó than phiền về:
django.db.models.fields.FieldDoesNotExist: Like has no field named u'created_by'
Bạn có muốn 'Trackable' là bảng riêng của mình, liên quan đến' Like' bằng khóa ngoại không? Nếu không, sử dụng ['abstract = True'] (https://docs.djangoproject.com/en/dev/topics/db/models/#abstract-base-classes) và' unique_together' của bạn sẽ hoạt động như mong đợi. Nếu vậy, bạn sẽ không thể thực thi ràng buộc đó với 'unique_together'. –
Tôi không chắc chắn nếu thêm rằng sẽ làm việc đúng cách bằng cách sử dụng https://github.com/chrisglass/django_polymorphic vì tôi không nhìn thấy nó đề cập về việc sử dụng abstract = True trong mô hình cơ sở. –
Tôi liếc nhìn dự án đó và có vẻ như nó được thiết kế để thừa kế 'abstract = False'. Trong trường hợp này bạn đang nói về hai bảng khác nhau, làm cho nó không thể sử dụng 'unique_together' theo cách đó. Lưu ý rằng 'abstract = True' sẽ cung cấp hiệu suất tốt hơn và cho phép ràng buộc duy nhất, vì vậy hãy nghĩ xem liệu bạn có thực sự cần sử dụng nhiều bảng hay không. –