Как смоделировать одноранговые транзакции в Django? - PullRequest
1 голос
/ 23 сентября 2019

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

Кажется неправильным сохранять транзакцию и все ее данные, сохраненные в обоих объектах пользователей.Я думаю, что мне нужно создать отдельную модель для транзакций, с уникальным идентификатором для каждой транзакции.Затем в объекте каждого пользователя я мог бы просто сохранить этот идентификатор транзакции.

Затем я бы просто дал каждой транзакции два первичных ключа, один для user.id покупателя и один для user.id покупателя?Это «много ко многим»?

Спасибо за любые советы здесь.

Правка - Вот что я пробовал:

class Transaction(models.Model):
    owner = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    purchaser = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    create_time = models.DateField(auto_now=True)
    item = models.ForeignKey(Item, on_delete=models.CASCADE)

Однако, это даетошибка items.Transaction.owner: (fields.E304) Reverse accessor for 'Transaction.owner' clashes with reverse accessor for 'Transaction.purchaser'. HINT: Add or change a related_name argument to the definition for 'Transaction.owner' or 'Transaction.purchaser'.

1 Ответ

1 голос
/ 23 сентября 2019

Вы должны добавить параметр related_name для обоих полей, каждое из которых имеет свое имя, например:

class Transaction(models.Model):
    owner = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, related_name = 'transaction_owner')
    purchaser = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, related_name = 'transaction_purchaser')
    create_time = models.DateField(auto_now=True)
    item = models.ForeignKey(Item, on_delete=models.CASCADE)

Дополнительные сведения: Django: Почему некоторые поля модели конфликтуют друг с другом?

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