2012-03-15 82 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

这是完全可以接受的。请记住,就像在使用任何子类而不是父类时一样,您只会将其限制为只有该子类及其子类,即使在代理类的情况下,子类与父类基本相同。