/ / Référencer un utilisateur Django contrib.admin via une clé étrangère? - django, django-admin

Référencer un utilisateur Django contrib.admin via une clé étrangère? - django, django-admin

Je développe un petit site Django et j'utilisedjango.contrib.admin pour gérer la gestion de contenu. Je voudrais capturer le prénom et le nom de l'auteur (un utilisateur Admin) d'un article lors de sa sauvegarde initiale (et ne pas le mettre à jour si un autre utilisateur modifie l'article).

c'est à dire.

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

De quoi ai-je besoin pour écrire pour saisir les champs du prénom et du nom de famille de cet utilisateur lors de la création d'un nouvel objet Article?

Réponses:

4 pour la réponse № 1

Demandez à votre modèle d'utiliser l'objet Utilisateur:

author = models.ForeignKey(User)

Pour éviter que ce champ ne soit modifiable lors de la mise à jour, consultez cet autre article SO:
Administrateur Django: exclure le champ du formulaire de modification uniquement

Pour modifier le champ de sélection de l'administrateur pour utiliser le prénom / nom, vous pouvez essayer cet extrait:
http://djangosnippets.org/snippets/1642/

Pour changer la vue de l'administrateur, en supposant que vous utilisez les modèles intégrés, vous pouvez ajouter une colonne personnalisée comme décrit dans ce billet: Comment ajouter une colonne personnalisée avec un lien hypertexte dans l'interface d'administration de 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 pour la réponse № 2

Je pense que vous recherchez ceci:

author = models.ForeignKey(User)

0 pour la réponse № 3

Il semble que la meilleure façon de gérer un résultat Aucun ou vide à partir de get_full_name est de simplement remplir User.author avec models.ForeignKey (User) puis - au niveau du modèle - d'utiliser ce qui suit:

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

... via cette réponse SO. Cela me permet d'effectuer des requêtes sur un utilisateurLes articles, mais gèrent toujours avec élégance les champs vides de prénom et de nom de famille si un utilisateur ne les a pas encore saisis, mais seront également mis à jour dynamiquement lorsqu'ils le seront).