Ссылка на пользователя Django contrib.admin через внешний ключ? - PullRequest
1 голос
/ 27 февраля 2011

Я занимаюсь разработкой небольшого сайта Django и использую django.contrib.admin для управления контентом.Я хотел бы записать имя и фамилию автора (пользователя Admin) Статьи при ее первоначальном сохранении (и не обновлять ее, если другой пользователь редактирует статью).*

class Article(models.Model)
    title = models.CharField(max_length=50)
    pub_date = models.DateTimeField('date published')
    author = ForeignKey(???)
    ...

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

Ответы [ 3 ]

4 голосов
/ 27 февраля 2011

Пусть ваша модель использует объект User:

author = models.ForeignKey(User)

Чтобы предотвратить изменение этого поля при обновлении, ознакомьтесь с этой другой статьей SO:
Администратор Django: исключить поле только в форме изменений

Чтобы изменить поле выбора администратора для использования имени / фамилии, вы можете попробовать этот фрагмент:
http://djangosnippets.org/snippets/1642/

Чтобы изменить представление администратора, если вы используете встроенные шаблоны, вы можете добавить пользовательский столбец, как описано в этом сообщении: Как добавить пользовательский столбец с гиперссылкой в ​​интерфейсе администратора django?

class AuthorAdmin(admin.ModelAdmin):
list_display = ('author_name',)

def my_author_name(self, obj):
    if obj.author.first_name and obj.author.last_name:
        return '%s %s' % (obj.author.first_name, obj.author.last_name)
    else: 
        return obj.author.username
my_author_name.allow_tags = True
my_author_name.short_description = 'Author'
1 голос
/ 27 февраля 2011

Я думаю, вы ищете это:

author = models.ForeignKey(User)
0 голосов
/ 27 февраля 2011

Похоже, что лучший способ обработать None или пустой результат get_full_name - это просто заполнить User.author моделями.ForeignKey (Пользователь), а затем - на уровне шаблона - использовать следующее:

{{ user.get_full_name|default:user.username }}

... через этот SO ответ . Это позволяет мне выполнять запросы к статьям пользователя, но все равно изящно обрабатывает пустые поля first_name & last_name, если пользователь еще не ввел их, но также будет обновляться динамически, когда они будут).

...