2012-03-15 60 views
0

是否可以使用代理模型實例作爲外鍵?Django中的代理類型和外鍵

這樣做有什麼缺點或風險嗎?

樣品的編號:

base_models.py

class BaseWidget(models.Model): 
    name = models.CharField(max_length=100) 
    code = models.CharField(max_length=100) 

class BasePart(models.Model): 
    name = models.CharField(max_length=100) 
    code = models.CharField(max_length=100) 
    widget = models.ForeignKey(BaseWidget, related_name="parts") 

models.py

from base_models import BaseWidget, BasePart 

class Part(BasePart): 
    class Meta: 
     proxy = True 

class Widget(BaseWidget): 
    def replace_part(self, old_code, new_code): 
     self.parts.filter(code=old_code).delete() 
     self.parts.add(Part.objects.get(code=new_code)) 
    class Meta: 
     proxy = True 

注意,在replace_part它被添加Part,而不是一個BasePart。這是我想知道的 - Django是否可以接受,如果是這樣,是否存在隱藏的缺陷或危險。

回答

1

這是完全可以接受的。請記住,就像在使用任何子類而不是父類時一樣,您只會將其限制爲只有該子類及其子類,即使在代理類的情況下,子類與父類基本相同。