私はadmin.pyでインラインクラスを作成し、選択したユーザーを更新するいくつかのアクションを作成しました。私が直面している問題は、ユーザーを選択してそのアクションを実行すると、adminユーザーのみが更新されるということです。私はrequest
を使用しているため推測しています。私は、アクションを開始する管理ユーザーではなく、選択されたユーザーを更新するアクションを取得しようとしていますが、これを数日後に把握しようとしています。 queryset
を使用している場合は、'Queryset' object has no attribute 'profile'
というエラーメッセージが表示されますが、ここで何を使用するかはわかりません。だからmu質問は、私が可能にしようとしているものです、もしそうなら、この作業をどのようにするかについての指針は、大いに感謝されるでしょう。以下の私のコードを見てください。Django管理者が選択したユーザーを変更しますか?
admin.py
admin.site.unregister(User)
class ProfileAdminInLine(admin.StackedInline):
model = Profile
class ProfileAdmin(UserAdmin):
list_display = ['username', 'email', 'first_name', 'last_name',
'rewards_punch_card', 'rewards_tier']
list_select_related = True
inlines = [ProfileAdminInLine]
actions = ['pc_add_1', 'pc_add_2', 'pc_add_3', 'pc_add_4', 'pc_add_5',
'pc_add_6', 'pc_add_7', 'pc_add_8', 'pc_add_9']
def rewards_tier(self, user):
return user.profile.rewards_tier
def rewards_punch_card(self, user):
return user.profile.rewards_current
def pc_add_1(self, request, queryset):
punch_card = request.user.profile.rewards_current
tier = request.user.profile.rewards_tier
credits = request.user.profile.rewards_credits
user_profile = request.user.profile
punch_cards_updated = punch_card + 1
if punch_cards_updated == 10:
request.user.profile.rewards_current = 0
user_profile.save()
if tier == 1:
request.user.profile.rewards_tier = tier + 1
request.user.profile.rewards_credits = credits + 25
user_profile.save()
elif tier == 2:
request.user.profile.rewards_tier = tier + 1
request.user.profile.rewards_credits = credits + 30
user_profile.save()
elif tier == 3:
request.user.profile.rewards_tier = tier + 1
request.user.profile.rewards_credits = credits + 35
user_profile.save()
elif tier == 4:
request.user.profile.rewards_tier = tier + 1
request.user.profile.rewards_credits = credits + 40
user_profile.save()
elif tier == 5:
request.user.profile.rewards_credits = credits + 50
user_profile.save()
elif tier == 6:
request.user.profile.rewards_credits = credits + 50
user_profile.save()
else:
request.user.profile.rewards_current = punch_card + 1
user_profile.save()
self.message_user(request, "Users were successfully updated by 1 item.")
'queryset'が選択されているプロファイルのリストが含まれています管理者:あなたはそれを直接使うべきです。しかし、プロファイルで実際に何をしたいのかははっきりしません。あなたのコードは何も変わりません。 –
この行に示されているように、 'punch_cards_updated = punch_card + 1'は' user.profile.rewards_current'オブジェクトに1つ追加しようとしています。 'queryset'を使用すると、クエリーセットに属性プロファイルが含まれていないという属性エラーが発生します。私が達成しようとしていることの全体像を示すためにコードを更新します。 – Kerosive
結果を保存しますか?このコードが機能したとしても、保存せずには何もしません。 –