Это может быть вопрос о дизайне.
Вопрос: «Каков наилучший способ найти предложения, которые должны иметь обратную связь, отправленную зарегистрированным пользователем».На сайте Отзывы есть 3 вкладки: «Отправлено», «Получено», «Отправить отзыв».На вкладке «Отправить отзыв» есть таблица со ссылкой «Идентификатор предложения», «имя пользователя (покупатель / отправитель» и «Отправить отзыв»), указывающая на форму обратной связи.
Вот код, который должен помочь понять, что я имею в виду.
Предложения отображаются до тех пор, пока какой-либо пользователь не купит их. Предложение закрывается, и для этого предложения создается новый экземпляр Заказа (сохранение деталей заказа).
Я пытаюсь реализовать приложение Feedback,где обе стороны транзакции предложения могут отправить отзыв о транзакции.
Давайте пропустим проблему «завершенного» или «запущенного» предложения.
class Offer(models.Model):
"""Offer is displayed for 5 days, then it's being ended by run everyday cron script.
If someone buys the offer end_time is being set, and offer is treated as ended.
Both sides of transaction may send feedback.
"""
whose = models.ForeignKey(User, verbose_name="User who has created the offer")
end_time = models.DateTimeField(blank=True, null=True, help_text="")
field = ()
fields2 = ()
order = models.ForeignKey(Order, balnk=True, null=True, help_text="Order details")
class Order(models.Model):
"""stores order details like user, date, ip etc."""
order_1_field_details = ()
who = models.ForeignKey(User, verbose_name="User who bought the offer")
offer_id = models.PositiveIntegerField("know it's unnecessary")
offer_data = models.TextField('offer data dict here')
class Feedback(models.Model):
offer_id = models.PositiveIntegerField()
sent_by = models.ForeignKey(User, verbose_name="Offer sender")
received_by = models.ForeignKey(User, verbose_name="Offer receiver")
def get_offer(self):
try:
Offer.objects.get(id=self.offer_id)
except Offer.DoesNotExist:
return None # offer moved to archive
В первом проекте было предложение = модели.ForeignKey (Предложение) вместо поля offer_id, но я собираюсь переместить некоторые старые предложения из таблицы предложений в другое для архивации. Я хотел бы, чтобы отзывы оставались, даже если я «заархивировал» предложение. В списке отзывов будет «Идентификатор предложения "ссылка и для предложений старше 60 дней пользователь увидит" перенесено в архив "при нажатии" подробности ".
Все, что я могу придумать на данный момент, это сойтиЕсли срок годности не истек, но был покупатель.
окончен () - менеджер, вернувший self.filter(end_date__isnull=False)
offers_with_buyer = models.Q(Offer.objects.ended().filter(whose__exact=request.user, order__isnull=False) | models.Q(Offer.objects.ended().filter(order__who__exact=request.user)
Как проверить, есть ли отзывы об этих предложениях?Я знаю, что должен вернуть пользователя и предложить идентификатор из набора запросов выше и проверить, существуют ли они в Feedback.offer_id и Feedback.sent_by .. или, возможно, мне следует полностью изменить дизайн модели ...