簡體   English   中英

如何在 models.py 中獲取當前用戶?

[英]How can I get the current user in models.py?

您好我正在嘗試添加用戶列以了解哪個用戶在 tools/model.py 頁面中添加了該工具

tools_name = models.CharField('Tool\'s Name', max_length=100, unique=True)
tools_project = models.ForeignKey(Project, on_delete=models.DO_NOTHING, null=True, blank=True, limit_choices_to=~Q(project_status=2), verbose_name='Project\'s Name')
user = models.CharField(max_length=100, editable=False)

但我想知道如何保存創建或更新工具的用戶?

模型通常是request unaware ,所以你不應該這樣做。 這是屬於視圖的任務。 此外,通常您使用ForeignKeyOneToOneField或其他關系。 這很有用,因為用戶最終可能會更改他們的(用戶)名稱。 通過存儲用戶名,您的數據庫可以包含一個不再存在的用戶名,甚至更糟:另一個用戶現在使用該用戶名,然后該用戶可以訪問以前“所有者”的模型。

因此,您的 model 看起來像:

from user.conf import settings

class MyModel(models.Model):
    tools_name = models.CharField('Tool\'s Name', max_length=100, unique=True)
    tools_project = models.ForeignKey(
        Project,
        on_delete=models.DO_NOTHING,
        null=True,
        blank=True,
        limit_choices_to=~Q(project_status=2),
        verbose_name='Project\'s Name'
    )
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        editable=False
    )

例如,您可以使用ModelForm ,然后讓視圖設置用戶:

from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect

@login_required
def my_view(request):
    if request.method == 'POST':
        form = MyModelForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.user = request.user
            form.save()
            return redirect('')
    else:
        form = MyModelForm()
    return render(request, '', {'form': form})

對於ModelAdmin ,您可以覆蓋.save_model(…)方法 [Django-doc]

from django.contrib import admin

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):

    def save_model(self, request, obj, form, change):
        obj.user = request.user
        super().save_model(request, obj, form, change)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM