복붙노트

[PYTHON] 장고 관리자에서 개체를 만들 때 현재 사용자를 자동 삽입하는 방법?

PYTHON

장고 관리자에서 개체를 만들 때 현재 사용자를 자동 삽입하는 방법?

기사가있는 데이터베이스가 있습니다.

submitter = models.ForeignKey(User, editable=False)

다음과 같이 사용자를 가져 오는 위치 :

from django.contrib.auth.models import User. 

특정 사용자가 기사를 제출할 때 자동으로 현재 활성 사용자를 제출자 필드에 삽입하고 싶습니다.

누구든지 어떤 제안이 있습니까?

해결법

  1. ==============================

    1.누군가가 대답을 찾고있는 경우에 대비하여 여기에 나와있는 해결책이 있습니다. http://demongin.org/blog/806/

    누군가가 대답을 찾고있는 경우에 대비하여 여기에 나와있는 해결책이 있습니다. http://demongin.org/blog/806/

    요약: 그는 에세이 테이블을 다음과 같이 가지고있었습니다 :

    from django.contrib.auth.models import User
    
    class Essay(models.Model):
        title = models.CharField(max_length=666)
        body = models.TextField()
        author = models.ForeignKey(User, null=True, blank=True)
    

    여기서 multiuser는 에세이를 만들 수 있으므로 다음과 같이 admin.ModelAdmin 클래스를 만들었습니다.

    from myapplication.essay.models import Essay
    from django.contrib import admin
    
    class EssayAdmin(admin.ModelAdmin):
        list_display = ('title', 'author')
        fieldsets = [
            (None, { 'fields': [('title','body')] } ),
        ]
    
        def save_model(self, request, obj, form, change):
            if getattr(obj, 'author', None) is None:
                obj.author = request.user
            obj.save()
    
  2. ==============================

    2.모델에있는 외래 키를 사용자가 원하지 않으면 admin.py override save 메소드에서

    모델에있는 외래 키를 사용자가 원하지 않으면 admin.py override save 메소드에서

    obj.author = request.user.username
    obj.save()
    

    DB에 로그인 한 사용자 이름이 저장됩니다.

  3. ==============================

    3.사용자 B가 사용자 A가 만든 레코드를 저장한다고 가정 해 보겠습니다. 위의 방법을 사용하면 레코드가 사용자 B와 함께 저장됩니다. 일부 시나리오에서는이 레코드를 저장하는 각 사용자가 "훔칠" 그것. 이 문제를 해결할 수있는 방법은 사용자를 한 번만 저장하는 것입니다.

    사용자 B가 사용자 A가 만든 레코드를 저장한다고 가정 해 보겠습니다. 위의 방법을 사용하면 레코드가 사용자 B와 함께 저장됩니다. 일부 시나리오에서는이 레코드를 저장하는 각 사용자가 "훔칠" 그것. 이 문제를 해결할 수있는 방법은 사용자를 한 번만 저장하는 것입니다.

    models.py

    from django.contrib.auth.models import User
    
    class Car(models.Model):
        created_by = models.ForeignKey(User,editable=False,null=True,blank=True)
        car_name = models.CharField(max_length=40)
    

    admin.py

    from . models import *
    
    class CarAdmin(admin.ModelAdmin):
        list_display = ('car_name','created_by')
        actions = None
    
        def save_model(self, request, obj, form, change):
            if not obj.created_by:
                obj.created_by = request.user
            obj.save()
    
  4. ==============================

    4.http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.prepopulated_fields에 따라 prepopulated_field admin 지시문에 ForeignKey를 사용할 수 없습니다.

    http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.prepopulated_fields에 따라 prepopulated_field admin 지시문에 ForeignKey를 사용할 수 없습니다.

    하지만이 스레드가 도움이 될 수 있습니다. 내 대답은 또한 프로 스캔 장 (Pro Django)의 Google 스캔 버전과 연결됩니다. 이상적으로 책을 구입할 수 있다면 더 낫다는 것을 확신 할 수 있습니다. 그러나 Google은 관련 챕터의 대부분을 어쨌든 갖고있는 것으로 보입니다.

  5. from https://stackoverflow.com/questions/2991365/how-to-auto-insert-the-current-user-when-creating-an-object-in-django-admin by cc-by-sa and MIT license