Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django中的代理类型和外键_Django_Django Models_Proxy Classes - Fatal编程技术网

Django中的代理类型和外键

Django中的代理类型和外键,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)

可以为外键使用代理模型实例吗

这样做有什么负面影响或风险吗

示例代码:

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")
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是否可以接受这一点,如果可以,那么这样做是否有任何隐藏的缺点或危险。

这是完全可以接受的。请记住,就像在使用任何子类而不是父类时一样,您将其仅限于该子类及其任何子类,即使在代理类的场景中,子类基本上与父类相同