Внешний ключ модели Django для любой модели, которая его вызывает.Python

Программы на Python
Ответить
Anonymous
 Внешний ключ модели Django для любой модели, которая его вызывает.

Сообщение Anonymous »

Через несколько лет я возвращаюсь к Django и столкнулся со следующей проблемой. Я делаю систему, в которой есть 2 модели; опрос и обновление. Я хочу создать модель уведомлений, в которую автоматически добавлялся бы объект при добавлении объекта опроса или объекта обновления, и у объекта уведомления был бы внешний ключ к объекту модели, который вызвал его добавление.
Однако я упираюсь в кирпичную стену, пытаясь понять, как мне это сделать, чтобы иметь модель с внешним ключом, который может относиться к одной из двух моделей, которые будут автоматически установлены на объект модели, который ее создает. . Буду признателен за любую помощь.
Я пытаюсь создать модель, которая выглядит примерно так (псевдокод):
class notification(models.model):
source = models.ForeignKey(to model that created it) #this is what I need help with
start_date = models.DateTimeField(inherited from model that created it)
end_date = models.DateTimeField(inherited from model that created it)

Кроме того, просто чтобы добавить некоторый контекст к вопросу, и в случае, если я смотрю на это под неправильным углом, я хочу сделать это, потому что и опросы, и обновления будут отображаться на той же странице, поэтому я планирую запросить модель уведомлений, а затем заставить представление сделать что-то вроде этого:
from .models import notification

notifications = notification.objects.filter(start_date__lte=now, end_date__gte=now).order_by('-start_date')

for notification in notifications:
if notification.__class__.__name__ == "survey_question":
survey = notification.survey_question.all()
question = survey.question()
elif notification.__class__.__name__ == "update":
update = notification.update.all()
update = update.update()

Я также делаю это вместо того, чтобы объединять два запроса и затем сортировать их по дате, поскольку в любом случае я хочу получать уведомления для каждого конкретного пользователя, поэтому мой план (в будущем) состоит в том, чтобы создать уведомление для каждого пользователя.
Вот мои модели (на которые я ссылаюсь в вопросе):
from django.db import models
from datetime import timedelta
from django.utils import timezone

def tmrw():
return timezone.now() + timedelta(days=1)

class update(models.Model):
update = models.TextField()
start_date = models.DateTimeField(default=timezone.now, null=True, blank=True)
end_date = models.DateTimeField(default=tmrw, null=True, blank=True)

class Meta:
verbose_name = 'Update'
verbose_name_plural = f'{verbose_name}s'

class survey_question(models.Model):
question = models.TextField()
start_date = models.DateTimeField(default=timezone.now, null=True, blank=True)
end_date = models.DateTimeField(default=tmrw, null=True, blank=True)

class Meta:
verbose_name = 'Survey'
verbose_name_plural = f'{verbose_name}s'


Подробнее здесь: https://stackoverflow.com/questions/793 ... l-calls-it
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»