Задать вопрос
@sidsukana

Как в модели django для foreign key поля сделать дополнительно условие выборки?

Есть 2 модели:
class A(models.Model):
    id = models.PositiveIntegerField(default=0, primary_key=True)
    version = models.PositiveIntegerField(default=0)
    value = models.PositiveIntegerField(default=0)
    
class B(models.Model):
    id = models.PositiveIntegerField(default=0, primary_key=True)
    version = models.PositiveIntegerField(default=0)
    a_value = models.ForeignKey(A, on_delete=models.DO_NOTHING)


Как сделать так, чтобы при обращении к полю a_value в модели B учитывалось поле version? Грубо говоря вместо
A.objects.get(pk=self.a_value)
выполнялось
A.objects.get(pk=self.a_value, version=self.version)


Мне в голову пришло использование property, но может быть есть более изящный способ?
  • Вопрос задан
  • 3058 просмотров
Подписаться 2 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 2
netpastor
@netpastor
Python developer
Чтобы не прописывать постоянно создай кастомный queryset manager и сделай там метод, в котором поле version будет учитываться
Ответ написан
Комментировать
darqsat
@darqsat
PM
У ОРМ есть метод select_related()
Изучай:
https://docs.djangoproject.com/en/2.0/ref/models/q...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы