@Tinord

Как осуществить соответствие между двумя моделями?

Здравствуйте.

Такой вопрос: есть две модели, не связанные между собой.
Первая, она формируется из Post запросов на добавление пользователей:
class Subscriber(models.Model):
    name = models.CharField(max_length=50, null=True)
    user_id = models.PositiveIntegerField()
    auth_user = models.CharField(max_length=50)
    creation_date = models.DateTimeField(verbose_name='creation date')

Вторая:
class BlogPost(models.Model):
    title = models.CharField(max_length=200)
    text = models.TextField(default='')
    author = models.ForeignKey(User, on_delete=models.CASCADE, max_length=50)
    created_date = models.DateTimeField(
        default=timezone.now)


Нужно осуществить соответствие между name и author.
Сделал фильтрацию во views по auth_user из первой модели, получил всех пользователей на которых подписан пользователь. Теперь мне требуется забрать у них посты, но эти две модели не связаны между собой.

class GetSubscribers(TemplateView):
    template_name = 'pages/subscriptions.html'

    def get_context_data(self, **kwargs):
        context = super(GetSubscribers, self).get_context_data(**kwargs)
        context['users'] = models.Subscriber.objects.filter(auth_user=self.request.user)
        context['posts'] = models.BlogPost.objects.all
        return context
  • Вопрос задан
  • 130 просмотров
Пригласить эксперта
Ответы на вопрос 2
tumbler
@tumbler Куратор тега Django
бекенд-разработчик на python
Если без ухищрений, то никак. Поскольку в Subscriber вместо ForeignKey(User) хранится просто user_id, Django не знает, что между Subscriber и BlogPost есть связь через внешние ключи. Соответственно, построить соответствующий запрос ORM не может.
Чтобы сделать правильно, Subscriber должен иметь два ForeignKey(User) - для подписавшегося, и для автора. Тогда всех авторов пользователя можно будет получить так: [s.author for s in user.subsriber_set.all()]
Если не менять схему данных, то можно написать прямой SQL-запрос через User.objects.raw()
Ответ написан
Комментировать
darqsat
@darqsat
PM
А ManyToMany тебе не подойдет?
Можно что в одну модель внести, что в другую. Или я не понимаю сути.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы