Nói rằng tôi có mô hình:Cách đúng để trả về cá thể mô hình proxy từ một cá thể mô hình cơ sở ở Django?
class Animal(models.Model):
type = models.CharField(max_length=255)
class Dog(Animal):
def make_sound(self):
print "Woof!"
class Meta:
proxy = True
class Cat(Animal):
def make_sound(self):
print "Meow!"
class Meta:
proxy = True
Hãy nói rằng tôi muốn làm:
animals = Animal.objects.all()
for animal in animals:
animal.make_sound()
Tôi muốn lấy lại một loạt các Woofs và Meows. Rõ ràng, tôi có thể chỉ định một make_sound trong mô hình ban đầu mà dĩa dựa trên animal_type, nhưng sau đó mỗi khi tôi thêm một loại động vật mới (tưởng tượng chúng trong các ứng dụng khác nhau), tôi phải đi vào và chỉnh sửa hàm make_sound đó . Tôi chỉ muốn xác định các mô hình proxy và yêu cầu họ xác định hành vi của chính họ. Từ những gì tôi có thể nói, không có cách nào để trả lại các trường hợp Cat hoặc Dog hỗn hợp, nhưng tôi nghĩ có thể tôi có thể định nghĩa phương thức "get_proxy_model" trên lớp chính trả về một con mèo hoặc một mô hình con chó.
Chắc chắn bạn có thể làm điều này, và chuyển một cái gì đó giống như khóa chính và sau đó chỉ cần làm Cat.objects.get (pk = passed_in_primary_key). Nhưng điều đó có nghĩa là làm một truy vấn bổ sung cho dữ liệu bạn đã có mà dường như dư thừa. Có cách nào để biến một con vật thành một con mèo hay một con chó một cách hiệu quả? Cách thích hợp để làm những gì tôi muốn đạt được là gì?
Bạn có thể áp dụng make_sound cho mô hình Động vật và thêm một sound = models.charField() vào nó. – monkut
Ví dụ của tôi là rất đơn giản - những gì tôi đang cố gắng làm đòi hỏi một loạt các công việc phụ thuộc vào loại và không thể được lưu trữ với mô hình. – sotangochips