2

これは簡単な質問だと思います。どういうわけか、私はまだ解決策を持っていません。

私はdjangoの復帰から設定されたオブジェクトを持っています:version_list. セット内の各オブジェクトには、ユーザー ID が関連付けられています。ユーザー ID に対応するユーザー名を取得するにはどうすればよいですか?

より明確にするために、version_list の各オブジェクトに名前、日付、およびユーザー ID がある場合、どのユーザー ID がどの名前と一致するかを把握するために、version_list セットをユーザー テーブルと結合するにはどうすればよいですか? これはビューで行われますか、それともテンプレートで行われますか?

4

4 に答える 4

9

シンプルなテンプレート タグを探していると思います。

from django import template
from django.contrib.auth.models import User

register = template.Library()

@register.simple_tag
def get_username_from_userid(user_id):
    try:
        return User.objects.get(id=user_id).username
    except User.DoesNotExist:
        return 'Unknown'

次のように使用します。

{% for version in version_list %}
  {% get_username_from_userid version.user_id %}
{% endfor %}
于 2010-04-02T20:18:00.323 に答える
1

これがある種の従来の互換性のためでない限り、実際にはスキーマを変更してForeignKey(User). この列のデータは同じである必要があるため、データベースで失いたくないデータが既にたくさんある場合は、モデル フィールドを次のように更新します。

user = models.ForeignKey(User)

フィールドが既に呼び出されている場合は、テーブルを変更する必要さえありませんuser_id

ユーザー名の取得に関しては、これは常にテンプレート レベルで行われますが、フル ネーム (Casey Stark) またはユーザー名 (caseywstark) が必要かどうかによって異なります。

{{ user }}ユーザー名の{{ user.get_full_name }}表示と氏名の表示に使用します。2 番目のメソッドは、テンプレート内の User オブジェクトの get_full_name 関数を呼び出します。これが空の文字列を返さないようにするには、user.first_name と user.last_name を設定する必要があることに注意してください。

{% for version in version_list %}
    {{ version.user }} wrote version {{ version }}
{% endfor %}
于 2010-04-02T19:28:54.760 に答える
0

バージョン オブジェクトにはユーザー プロパティ (つまり、ForeignKey) がありますか、それとも単なる整数フィールドですか? ユーザー外部キーの場合は、次のように言えます。

{% for v in version_list %}
{{ v.user.get_full_name }}
{% endfor %}

それ以外の場合は、関連するユーザーを検索する関数/プロパティをバージョン オブジェクトに追加する必要があります。

from django.contrib.auth.models import User

def related_user(self):
    try:
        return User.objects.get(pk=self.user_id)
    except User.DoesNotExist:
        return None

そして、あなたのテンプレートで:

{% for v in version_list %}
{{ v.related_user.get_full_name }}
{% endfor %}
于 2010-04-02T16:34:32.700 に答える