2009-09-25 94 views

回答

98

您需要知道用戶的位置?

views用戶在請求中被提供爲request.user

對於用戶在處理模板看到here

如果你想節省模型的實例的創建者或編輯,你可以這樣做:

model.py

class Article(models.Model): 
    created_by = models.ForeignKey(User, related_name='created_by') 
    created_on = models.DateTimeField(auto_now_add = True) 
    edited_by = models.ForeignKey(User, related_name='edited_by') 
    edited_on = models.DateTimeField(auto_now = True) 
    published = models.BooleanField(default=None) 

admin.py

class ArticleAdmin(admin.ModelAdmin): 
    fields= ('title','slug','text','category','published') 
    inlines = [ImagesInline] 
    def save_model(self, request, obj, form, change): 
     instance = form.save(commit=False) 
     if not hasattr(instance,'created_by'): 
      instance.created_by = request.user 
     instance.edited_by = request.user 
     instance.save() 
     form.save_m2m() 
     return instance 

    def save_formset(self, request, form, formset, change): 

     def set_user(instance): 
      if not instance.created_by: 
       instance.created_by = request.user 
      instance.edited_by = request.user 
      instance.save() 

     if formset.model == Article: 
      instances = formset.save(commit=False) 
      map(set_user, instances) 
      formset.save_m2m() 
      return instances 
     else: 
      return formset.save() 

我發現這個在互聯網上,但我不知道在哪裏了

+4

只需注意,在save_formset - > set_user中,應該是如果不是hasattr(instance,'created_by') – FurtiveFelon 2010-06-15 19:56:01

+0

我可以在settings.py中獲取當前用戶嗎? – Mahendra 2016-03-18 13:37:05

+0

你爲什麼要那樣做? (請創建一個新的問題,我的Django的日子早已消失) – vikingosegundo 2016-03-18 14:11:47

5

擴展@ vikingosegundo的答案,如果你想獲得內部模型的用戶名,我發現涉及聲明中間件的方式。創建一個名爲get_username.py應用內的文件,與此內容:

from threading import current_thread 

_requests = {} 

def get_username(): 
    t = current_thread() 
    if t not in _requests: 
     return None 
    return _requests[t] 

class RequestMiddleware(object): 
    def process_request(self, request): 
     _requests[current_thread()] = request 

編輯您的settings.py,並把它添加到MIDDLEWARE_CLASSES:現在

MIDDLEWARE_CLASSES = (
    ... 
    'yourapp.get_username.RequestMiddleware', 
) 

,在你save()方法,就可以得到當前用戶名像這樣:

from get_username import get_username 

... 

def save(self, *args, **kwargs): 
    req = get_username() 
    print "Your username is: %s" % (req.user) 
+0

專用線程:http://stackoverflow.com/questions/10991460/django-get-current-user-in-model-save – 2016-05-09 08:03:08

+0

@nKn是真正專用的Middleware需要在'Models'對象中調用'get_username()'?如果是這樣,那麼有一個關於這個規範文檔的鏈接會很好。是否更新了1.9.5中的原生django函數? – alvas 2016-05-30 07:25:40

3

的Django 1.9.6默認的項目有在默認模板

0所以你可以寫東西,這個直接,如:

{% if user.is_authenticated %} 
    {{ user.username }} 
{% else %} 
    Not logged in. 
{% endif %} 

此功能是通過django.contrib.auth.context_processors.auth背景處理器在settings.py提供。

專用模板問題:How to access the user profile in a Django template?

相關問題