Настройка первичных ключей модели

У меня есть модель Mail, которая сохраняет объект почты. Модель почты также имеет поле отношения OneToMany, которое связано с User (Пользователь может иметь много писем, но у письма может быть только один владелец (объект User)). Мне нужно реализовать собственную систему ссылок на первичные ключи для каждого объекта Mail, потому что каждое письмо должно быть связано только с одним пользователем, чтобы правильно отображать урлы.

Например, если Пользователь-1 отправляет свои первые два письма во всем приложении, они сохраняются в базе данных с идентификаторами 1 и 2 id, это стандартная система сохранения первичных ключей django. Затем, если Пользователь-2 отправляет свое первое письмо, это письмо должно быть сохранено с id 1, потому что это первое письмо Пользователя-2, но оно будет сохранено с id 3, потому что по умолчанию система ссылок на первичные ключи, id уже заняты 1 и 2. И в этом проблема, потому что url первого письма для пользователя-2 будет отображаться как /sent-mail/3, тогда как должен быть /sent-mail/1

Итак, как настроить модель Mail и реализовать в ней собственные ссылки на первичный ключ для каждого пользователя.

Вот модель:

class Mail(models.Model):
    url_id = None
    title = models.CharField(max_length=64)
    body = models.CharField(max_length=1000)
    unvisited = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)
    to_user = models.ForeignKey(User, related_name="ToUser", on_delete=models.SET_NULL, null=True)
    from_user = models.ForeignKey(User, related_name="FromUser", on_delete=models.SET_NULL, null=True)
    from_user_inf = models.CharField(max_length=30)
    to_user_inf = models.CharField(max_length=30)

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

def get_next_id_in_sent_mail_sequence(mail):
    ...

class Mail(Model):
    mail_id_per_user = IntegerField(default=get_next_id_in_sent_mail_sequence)
    ...

И вместо запроса по id запросить их по mail_id_per_user.

Но лично для меня это не такая уж важная функция

Вернуться на верх