Модель форума Django с уникальным идентификатором сообщений - PullRequest
0 голосов
/ 07 января 2012

Я изучаю Python и Django и пытаюсь создать какой-то простой форум.Я создал модели:

class Board(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField(blank = True)

class Post(models.Model):
    board = models.ForeignKey(Board)
    ...

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

Ответы [ 2 ]

1 голос
/ 07 января 2012

Я не знаю, говорите ли вы об использовании первичного ключа в качестве идентификатора записи, но это не сработает, если вы хотите, чтобы он начинался с 0 для каждой доски. Я бы порекомендовал добавить другое поле для вашей модели Post и самостоятельно управлять им по методу save. Пример:

class Post(models.Model):
    board = models.ForeignKey(Board)
    post_count = models.PositiveIntegerField(default=0)

    def save(self, *args, **kwargs):
        if not self.id:
            self.post_count = self.board.post_set.count()
        super(Post, self).save(*args, **kwargs)

Редактировать: Как отмечает Брайан, могут быть проблемы при удалении сообщений. Это приведет к дублированию post_id с. Вы можете добавить поле deleted к модели, чтобы "фальсифицировать" удаление сообщений (не показывать, когда deleted = True), что обеспечило бы точный подсчет post_id.

Редактировать 2: Вы можете установить post_count равным максимальному количеству сообщений для этой доски + 1 (или 0, если счет равен 0)

0 голосов
/ 07 января 2012

Если это действительно то, что вы хотите, вам придется управлять этим самостоятельно, добавив какой-то IntegerField к вашей Post модели.

Я бы серьезно усомнился, почему вы захотите это сделать.Это будет сложно поддерживать, особенно если вы начнете добавлять возможность удалять сообщения или перемещать сообщения из одного Board в другое.

...