0

I'm working on website whose an app which has class called Members whose a field that is related to the builtin User class from django.contrib.auth.models and it looks like

class Members(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    member_image = models.ImageField(upload_to='unknown')
    member_position = models.CharField(max_length=255)
    ...

So as you can see when I'm adding member_image as a user I have also to select the user which doesn't make sense to me because I want to detect which user is logged in and pass his/her id as default parameter like

class Members(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, default=request.user.id)

and after remove the user field in the admin panel like

class MembersAdmin(admin.ModelAdmin):
    fields = ('member_image', 'member_position', ...)

so that if the user field doesn't selected it will set the logged in user_id by default

but to access request out of the views.py is not possible.

so how will I achieve this I also tried the following answers

but still not get it

Umutambyi Gad
  • 4,082
  • 3
  • 18
  • 39
  • 1
    I would suggest you to modify MembersAdmin `save_model` method and set current logged in user as user. Checkout this url - https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_model – Jeet Jan 22 '21 at 15:35
  • can you give me a short snippet – Umutambyi Gad Jan 22 '21 at 15:41

2 Answers2

2

Modify MembersAdmin save_model method and attach request.user to the object prior to saving.

class MembersAdmin(admin.ModelAdmin):
    fields = ('member_image', 'member_position', ...)
    
    def save_model(self, request, obj, form, change):
        obj.user = request.user
        super().save_model(request, obj, form, change)
Jeet
  • 362
  • 1
  • 5
1

For exclude the current logged in User for particular page or view, You can try this :-

from django.contrib.auth import get_user_model
User = user_model()

def some_view(request):
    exclude_current_user = User.objects.exclude(user=request.user)
Lars
  • 1,234
  • 1
  • 8
  • 31