Django中的代理类型和外键
问题描述:
是否可以使用代理模型实例作为外键?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是否可以接受,如果是这样,是否存在隐藏的缺陷或危险。
答
这是完全可以接受的。请记住,就像在使用任何子类而不是父类时一样,您只会将其限制为只有该子类及其子类,即使在代理类的情况下,子类与父类基本相同。