Добавьте связанные объекты пользователя и отобразите их в модели пользователя в django admin - PullRequest
0 голосов
/ 22 января 2020

У меня есть две модели проектов и Пользователь в проектах, с которыми связан Пользователь, как показано ниже models.py:

class project(models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE)
    room = models.ForeignKey(room,on_delete=models.CASCADE)
    goal = models.ManyToManyField(goal)
    design = models.ManyToManyField(design)
    furniture = models.ForeignKey(furniture,on_delete=models.CASCADE)
    created_at = models.DateTimeField(default=datetime.now)
    updated_at = models.DateTimeField(default=datetime.now)

Теперь здесь я хочу отобразить дополнительный столбец как проекты на странице пользователя в django Администратор для каждого пользователя, когда я нажимаю на него, он должен перейти к конкретной странице проекта этого пользователя. Снимки экрана: Это страница списка пользователей enter image description here

Это страница списка проектов enter image description here

Это страница сведений о проекте enter image description here

admin.py:

from django.contrib import admin
from .models import project
class ProjectAdmin(admin.ModelAdmin):
    readonly_fields = ('user','room','goal','design','furniture','created_at','updated_at')

admin.site.register(project,ProjectAdmin)

Пожалуйста помогите мне заранее спасибо

1 Ответ

0 голосов
/ 22 января 2020

Вам необходимо написать собственного администратора для своего пользователя:

from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin
from django.utils.safestring import mark_safe

UserModel = get_user_model()

admin.site.unregister(UserModel)

@admin.register(UserModel)
class CustomUserAdmin(UserAdmin):
    list_display = (
        'username', 'email', 'first_name', 'last_name', 'user_project'
    )

    def user_project(self, obj):
        url = '/admin/modsy/project/{}/change/'.format(obj.project.pk)
        return mark_safe('<a href="{}">view project</a>'.format(url))

...