Получить все модели, вовлеченные в набор запросов django - PullRequest
0 голосов
/ 31 октября 2018

У меня есть пользователи модельного класса, в которых есть пользователи моей компании

class User(models.Model):
    ...
    name = CharField(max_length=100)
    email = CharField(max_length=100)
        ...
    )

Затем моя компания сотрудничала, чтобы обслуживать другую компанию, поэтому мы решили оставить обоих пользователей в одной таблице пользователей. Следовательно, мы добавили поле source_id в модель, поэтому теперь оно выглядит следующим образом: где мы сохраняем значение по умолчанию 1, что означает, что пользователь принадлежит нашей компании, а для других мы будем использовать source_id как 2.

class User(models.Model):
    ...
    soiurce_id=IntegerField(default=1)
    name = CharField(max_length=100)
    email = CharField(max_length=100)
        ...
    )

Но полный код написан для работы только с одним источником. Даже один и тот же пользователь может прийти из двух разных компаний с одним и тем же адресом электронной почты ... поэтому я сделал (source_id, email) как уникальное ограничение. Хотя я получаю источник в потоке запросов. Поэтому я попытался переопределить get и filter, добавив source_id в набор запросов менеджера пользователей, но это не получится, если мы, пользователь, будем объединены с другими таблицами

Например: Houses.objects.filter (user__email = "abc@xyz.com")

при этом он вызовет диспетчер моделей дома, и запросы не будут переопределены фильтром, и я получу обоих пользователей.

Есть ли способ, которым я принудительно вставляю source_id в каждый запрос, связанный с этой пользовательской таблицей, если его нет в запросе? в централизованном месте, чтобы избежать большого изменения кода.

У меня есть центральное место, куда приходят все запросы, поэтому, если есть какой-либо способ, я могу видеть все модели, вовлеченные в этот набор запросов, я могу видеть, участвует ли пользователь в нем и добавит ли фильтр source_id

Заранее спасибо за любую помощь или продумал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...