В django, отобразить всех пользователей с соответствующим изображением профиля на главной странице администратора

Я новичок в django, я работаю над проектом. Я хочу отображать информацию о пользователях с соответствующей фотографией профиля на главной странице администратора. Я использую модель пользователя по умолчанию.

Я использую userdata= User.objects.filter(is_superuser=False, is_staff=False) для отображения всей информации о пользователе

моя модель профиля - это

class Profile(models.Model):
user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)   
forget_password_token = models.CharField(max_length=100)
image = models.ImageField(upload_to="images",default="default/user.png")
def __str__(self):
   return f'{self.user} profile'

Я хочу сделать вот так введите описание изображения здесь

Пожалуйста, помогите мне добиться этого. Заранее спасибо

Я пытаюсь достичь этого из модели пользователя по умолчанию

id | image | name

  1. profile1.jpg john

  2. profile2.jpg poul

  3. profile3.jpg mitch

Я сделал введите описание изображения здесь

В колонке профиля мне нужно изображение профиля соответствующего пользователя

я хочу добиться этого в колонке профиля я хочу отобразить картинку профиля пользователя

Вы не можете запросить is_superuser=False и не можете отобразить изображение, потому что вы фильтруете через встроенную модель User, а не через вашу модель Profile, которая имеет лучшую связь, т.е. связь OneToOne с вашей моделью User. Вы можете просто запросить через модель Profile и выполнить свою работу следующим образом:

Попробуйте следующий код:

models.py

class Profile(models.Model):
user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)   
forget_password_token = models.CharField(max_length=100)
image = models.ImageField(upload_to="images",default="default/user.png")
def __str__(self):
   return f'{self.user} profile'

views.py

from django.shortcuts import render
from . models import Profile
from django.db.models import Q


def showallusers(request):
    data = Profile.objects.filter(Q(user__is_superuser=False), Q(user__is_staff=False))
    return render(request, "instructor/showallusers.html", {'data': data})

В приведенном выше представлении запрос выполняется через Profile модель.

Файл шаблона

<thead>
    <tr style="background-color:gray;">
        <th scope="col">ID</th>
        <th scope="col">Profile</th>
        <th scope="col">First Name</th>
        <th scope="col">Last Name</th>
        <th scope="col">Email</th>
        <th scope="col">Action</th>
    </tr>
</thead>
    
<tbody>
    {% for userData in data %}
    <tr>
        <th scope="row">{{userData.id}}</th>
        <td><img style="width: 40px; border-radius:15px;" src="{{userData.image.url}}" alt="this is it."></td>
        <td>{{userData.user.first_name}}</td>
        <td>{{userData.user.last_name}}</td>
        <td>{{userData.user.email}}</td>
        <td> 
            <a href="{% url 'dashboard:delete_user' userData.id %}"> <button class="btn btn-danger btn-sm" onclick="window.mytest()">Delete</button></a>
            <script type="text/javascript">window.mytest = function() { var isValid = confirm('Are you sure to Delete this user?');
                if (!isValid) { event.preventDefault();  alert("It wont delete. Yay!");}}</script>
            
        </td>
        
    </tr>
    {% endfor %}
</tbody>

Note: В качестве userData.id, который передается как href="{% url 'dashboard:delete_user' userData.id %}" для удаления, будет взят id из Profile модели.

Note: Представления в django, основанные на function, написаны на snake_case, поэтому будет лучше, если название представления изменится на show_all_users с showallusers.

Вернуться на верх