是否可以将代理模型实例用于外键?
这样做有任何缺点或风险吗?
示例代码:
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可以接受的,如果有的话,这样做是否有任何隐藏的缺点或危险。
答案 0 :(得分:1)
完全可以接受。请记住,就像使用任何子类而不是父类一样,然后将它限制为只有那个孩子及其中的任何子项,即使在代理类的场景中,子项与父项基本相同