Типы прокси и внешние ключи в Django - PullRequest
0 голосов
/ 15 марта 2012

Можно ли использовать экземпляры прокси-модели для внешнего ключа?

Существуют ли какие-либо недостатки или риски, связанные с этим?

Пример кода:

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.Это то, что мне интересно - приемлемо ли это для Джанго и, если да, есть ли какие-либо скрытые недостатки или опасности для этого.

1 Ответ

1 голос
/ 15 марта 2012

Это вполне приемлемо. Просто имейте в виду, что, как и при использовании любого дочернего класса вместо родительского, вы ограничиваете его только этим дочерним классом и любыми дочерними классами, даже если в сценарии прокси-классов дочерний элемент в основном совпадает с родительским .

...