Показать подмножество данных моих моделей в Django Admin - PullRequest
0 голосов
/ 19 сентября 2019

моя модель базы данных похожа на

class Restaurant(models.Model):
    email_sent = models.BooleanField(null=True, default=False)
    rest_owner = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name='rest_owner')
    is_approved = models.BooleanField(null=False, default=False)

Я хочу создать отдельную таблицу, в которой я могу отображать данные только полей, где is_approved = 0 .это просто на сайте Django.Но я не могу найти способ сделать это на стороне djangoAdmin.Или для этого нужно сделать собственного админа?

Ответы [ 2 ]

2 голосов
/ 19 сентября 2019

Добавьте это к своему admin.py:

from django.contrib import admin
from .models import Restaurant

def mark_approved(modeladmin, request, queryset):
    queryset.update(is_approved=True)
mark_approved.short_description = "Mark selected restaurants as approved."

class RestaurantAdmin(admin.ModelAdmin):
    list_filter = ('is_approved',)
    actions = ('mark_approved',)

admin.site.register(Restaurant, RestaurantAdmin)

После этого вы сможете перейти к администратору Django и увидеть там ссылку на ресторан.Оттуда вы можете отфильтровать свой список на том, является ли is_approved True или нет.

Чтобы пометить рестораны как утвержденные, выберите их в списке и щелкните раскрывающийся список действий, как показано на скриншоте в * 1006.* Django Docs

1 голос
/ 19 сентября 2019

Вы можете создать модель прокси , а затем немного обновить набор запросов, чтобы удовлетворить ваши требования.

class UnapprovedRestaurant(Restaurant):
    class Meta:
        proxy=True

class UbapprovedRestaurantAdmin(admin.ModelAdmin):
    def get_queryset(self, *args, **kwargs):
        return Restaurant.objects.filter(is_approved=False)

admin.site.register(UnapprovedRestaurant, UbapprovedRestaurantAdmin)

В случае, если вы не хотите отделить свою страницу администратора для этих2 статуса.Затем я предпочитаю, чтобы вы создали пользовательский фильтр для своей страницы администратора, чтобы вы могли фильтровать данные на основе определенного условия, например так:

class RestaurantFilter(admin.SimpleListFilter):

    def lookups(self, request, model_admin):
        return (
            'approved': 'Approved',
            'unapproved': 'Unapproved'
        )

    def queryset(self, request, queryset):
        value = self.value()
        if value is None:
            return queryset
        elif value == 'approved':
            return queryset.filter(is_approved=True)
        elif value == 'unapproved':
            return queryset.filter(is_approved=False)

class RestaurantAdmin(admin.ModelAdmin):
    list_filter = (RestaurantFilter, )

admin.site.register(Restaurant, RestaurantAdmin)

Надеюсь, это поможет!

...