Несколько ModelAdmins / представлений для одной и той же модели в админке Django

, так что вы хотите, чтобы регулярное выражение соответствовало как mm / dd / yy

^((0?1?1){1}|(0?1?2){1}|([0]?3|4|5|6|7|8|9))\/((0?1?2?3?1){1}|(0?1?2?(2|3|4|5|6|7|8|9|0))|(30))\/[1-90]{4}$

, это регулярное выражение будет точно соответствовать вашему желанию в этом формате. mm / dd / yy a не будет проверять фальшивую дату вы можете проверить регулярное выражение на regex101 , которое вы можете проверить для дат 12/30/2040 и 09/09/2020 и что вы хотите для этого формата. Я думаю, что это также кратчайшее регулярное выражение, которое вы можете найти для этого формата

141
задан Jordan Jambazov 4 February 2016 в 18:01
поделиться

1 ответ

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

class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'pubdate','user')

class MyPost(Post):
    class Meta:
        proxy = True

class MyPostAdmin(PostAdmin):
    def get_queryset(self, request):
        return self.model.objects.filter(user = request.user)


admin.site.register(Post, PostAdmin)
admin.site.register(MyPost, MyPostAdmin)

Тогда по умолчанию PostAdmin будет доступен по адресу /admin/myapp/post, а список сообщений, принадлежащих пользователю, будет находиться по адресу /admin/myapp/myposts.

После просмотра http://code.djangoproject.com/wiki/DynamicModels я придумал следующую функцию полезности функции:

def create_modeladmin(modeladmin, model, name = None):
    class  Meta:
        proxy = True
        app_label = model._meta.app_label

    attrs = {'__module__': '', 'Meta': Meta}

    newmodel = type(name, (model,), attrs)

    admin.site.register(newmodel, modeladmin)
    return modeladmin

Ее можно использовать следующим образом:

class MyPostAdmin(PostAdmin):
    def get_queryset(self, request):
        return self.model.objects.filter(user = request.user)

create_modeladmin(MyPostAdmin, name='my-posts', model=Post)
257
ответ дан 23 November 2019 в 22:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: