Django中的代理类型和外键
可以为外键使用代理模型实例吗 这样做有什么负面影响或风险吗 示例代码: base_models.pyDjango中的代理类型和外键,django,django-models,proxy-classes,Django,Django Models,Proxy Classes,可以为外键使用代理模型实例吗 这样做有什么负面影响或风险吗 示例代码: 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)
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")
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
型号.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")
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\u part
中,它添加的是part
,而不是BasePart
。这就是我想知道的——Django是否可以接受这一点,如果可以,那么这样做是否有任何隐藏的缺点或危险。这是完全可以接受的。请记住,就像在使用任何子类而不是父类时一样,您将其仅限于该子类及其任何子类,即使在代理类的场景中,子类基本上与父类相同