Как получить значение PK другой модели в текущей модели получить абсолютный URL-адрес Django - PullRequest
0 голосов
/ 08 ноября 2019

Я учу Джанго. Я очень новичок в программировании. У меня есть одна модель, как показано ниже:

class Group(models.Model):
    author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    group_description = models.TextField()
    created_date = models.DateTimeField(
        default=timezone.now)
    published_date = models.DateTimeField(
        blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        self.save()
        return reverse('group-detail', kwargs={'pk': self.pk})

now I am creating another model which needs the pk value of the above Group model:
class GroupPost(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('group-post-detail', kwargs={'pk': Group.pk, 'pk2': self.pk})

, когда я даю только Group.pk, он выдает ошибку, предоставляя следующую информацию.

Обратное для 'group-post-detail' с аргументами ключевого слова'{' pk ':,' pk2 ': 73}' не найден. Попробован 1 шаблон (ов): ['groups / (? P [0-9] +) / post / (? P [0-9] +) / $']

Как избавиться отсообщение об ошибке. Как правильно поступить? Любая помощь будет оценена.

Спасибо

1 Ответ

0 голосов
/ 08 ноября 2019

Вы должны иметь отношение многие-к-одному (ForeignKey) с моделью Group из модели GroupPost, так как каждое сообщение принадлежит определенной группе, и одна группа может иметь много сообщений.

Итак, добавьте ForeignKey:

class GroupPost(models.Model):
    ...
    group = models.ForeignKey('Group', on_delete=models.CASCADE)

Теперь вы можете ссылаться на Group id (или pk) из GroupPost экземпляра:

def get_absolute_url(self):
    return reverse('group-post-detail', kwargs={'pk': self.group.pk, 'pk2': self.pk})
    #                                                 ^^^^^^ Here

Предполагая, что имя представления group-post-detail.

Кроме того, вместо того, чтобы ссылаться на ключевые слова URL как pk и pk2, вы можете быть более явными:

def get_absolute_url(self):
        return reverse('group-post-detail', kwargs={'group_pk': self.group.pk, 'group_post_pk': self.pk})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...