Ты думаешь в правильном направлении. Но было бы хорошо, если бы вы могли показать свои модели, потому что довольно сложно спланировать архитектуру, поскольку всегда может быть дополнительная бизнес-логика. Просто начните с нуля:
Модель контента, которую пользователь может предложить
class Content(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.RichTextField()
Запрос модели. Пользователи могут создавать запросы, которые могут видеть другие пользователи.
class Request(models.Model):
requestor = models.ForeignKey(User, on_delete=models.CASCADE)
description = models.TextField()
Любой пользователь может ответить на запрос предложением, если у него есть контент (это может быть контент только с особым типом, idk):
class Offer(models.Model):
PENDING = 'pending'
WAITING_FOR_PAYMENT = 'waiting_for_payment'
PAYMENT_COMPLETE = 'payment_complete'
DECLINED = 'declined'
STATE_CHOICES = (
(PENDING, _('Pending')),
(WAITING_FOR_PAYMENT, _('Waiting for payment'),
(PAYMENT_COMPLETE, _('Payment complete')),
(DECLINED, _('Declined')),
)
request = models.ForeignKey(Request, on_delete=models.CASCADE)
content = models.ForeignKey(Content, on_delete=models.CASCADE)
state = models.Charfield(max_length=32, choices=STATE_CHOICES, default=PENDING)
Вы можете управлять состоянием предложения. Например, если state=PAYMENT_COMPLETE
вы можете показать ссылку на скачивание контента и т. Д.
Как я сказал выше, невозможно предсказать схему без спецификаций. Я предлагаю вам просто начать кодирование.