Estoy trabajando en un sitio web cuya aplicación tiene una clase llamada Members cuyo campo está relacionado con la clase de usuario integrada de django.contrib.auth.models y parece

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)
    ...

Como puede ver, cuando agrego a member_image como usuario, también tengo que seleccionar el <×user que no tiene sentido para mí porque quiero para detectar qué usuario está conectado y pasar su identificación como parámetro predeterminado me gusta

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

Y después de eliminar el campo de usuario en el panel de administración como

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

De modo que si el campo de usuario no se selecciona, establecerá el user_id registrado de forma predeterminada

Pero no es posible acceder a request desde views.py.

Entonces, ¿cómo lograré esto? También probé las siguientes respuestas

Pero aun no lo entiendo

0
Umutambyi Gad 22 ene. 2021 a las 18:15

2 respuestas

La mejor respuesta

Modifique el método MembersAdmin save_model y adjunte request.user al objeto antes de guardarlo.

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)
1
Jeet 22 ene. 2021 a las 15:50

Para excluir al usuario que ha iniciado sesión actualmente para una página o vista en particular, puede intentar esto: -

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

def some_view(request):
    exclude_current_user = User.objects.exclude(user=request.user)
1
developer 22 ene. 2021 a las 15:44
65847783