@altyn

Как получить User.last_name в модели Django как foreign key?

Есть модели в django app:
class News(models.Model):
    news_title = models.CharField(max_length=255, verbose_name="Заголовок поста")   # 3аголовок поста
    slug = models.SlugField(max_length=255, verbose_name="Идентификатор")    # Slug
    news_date = models.DateTimeField(u'Дата публикации')    # дата публикации u'Дата публикации'
    news_image = models.ImageField(upload_to='images/post_images', verbose_name="Изображение статьи")
    news_flickr_albumId = models.CharField(max_length=300, default="Нет фотографий", verbose_name="Flickr Album ID")
    news_content = models.TextField(max_length=20000,
                                    default="No content",
                                    verbose_name="Текст поста (максим 20000 симв)")   # текст поста
    news_author = models.ForeignKey(User, default='1', verbose_name="Автор статьи")   # Автор поста

    class Meta:
        ordering = ['-news_date', ]
        verbose_name = 'Новость'
        verbose_name_plural = 'Новости'

    def __unicode__(self):
        return self.slug

    def get_absolute_url(self):
        return "/news/%s/" % self.slug


Как вы заметили news_author берет из User User.username, а это по моему есть нехорошо, хотелось бы User.last_name.
  • Вопрос задан
  • 393 просмотра
Решения вопроса 1
@deliro
1. Как мы заметили, news_author не берёт из User User.username. Поле превращается в news_author_id и из User берётся User.pk (id). Брать last_name глупо, ибо коллизии неизбежны. Другое дело, что ты видишь username, потому что у юзера в методе __unicode__ стоит return self.username. Чтобы выводить то, что ты хочешь - используй его же методы или атрибуты (get_full_name или last_name, как ты хочешь).

2. Почему подавляющее большинство хлебом не корми - дай обозвать криво атрибуты? Вот зачем делать атрибуты news_author, news_title, news_content, если у тебя модель УЖЕ называется News?

3.
def get_absolute_url(self):
        return "/news/%s/" % self.slug

Это плохо. Резберись с функцией reverse (ну и reverse_lazy) и тегом шаблона {% url %}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы