I'm working a conference registration page. The system can allow multiple conferences to be registered for and used.
I'm using the admin to manage the conferences, but I need a way in the admin system to view only the people registered for a given conference. I know I can use list filters, but I was wondering if I can somehow use the URL.
For example, is it possible to do something like this? /admin/appname/modelname/SomeConference and only have that show the instances of that model associated with that confernece?
This is what filters are specifically for.
If you look at what happens when you activate a filter in the Admin, it just updates the URI to include a lookup value:
http://example.com/admin/core/model/?model_id__exact=1
So "technically", yes, there's a way to do this just using a URL.
Because that's how filters work in the first place.
Related
I really like StreamFields, but I don't want the baggage of Wagtail's Publishing system.
For example, consider a Forum community site. Instead of using CK Editor or BBCode, Markdown etc form input. I want to give users the option of StreamField based input to construct posts or replies
Is this possible? If yes, what steps would I need to take or edits to Wagtail do I need to do?
I'm guessing using a permission system while keeping the user as a limited admin would be the thing to do, since removing the user from admin doesn't seem to be possible since Wagtail is heavily reliant on Django Admin.
I'm guessing using a permission system while keeping the user as a
limited admin would be the thing to do, since removing the user from
admin doesn't seem to be possible since Wagtail is heavily reliant on
Django Admin.
If you want to reuse StreamFields, you probably want to use the Wagtail admin interface; doing otherwise is likely to be quite a bit of work. So users will need to be able to log in and have the wagtail_admin permission so they can access the admin interface. If you tried to use Page models for your forum, you are going to end up crossways of the way Wagtail's page permissions cascade. You could probably write your own admin views for regular users to add certain kinds of content.
But honestly, unless you have quite a bit of experience with Wagtail in its normal content management mode, I wouldn't suggest you try using it for this use case.
The admin interface for editing (adding, deleting, changing) entries in the database is great. I am working on a system, based on HTML forms, to allow users to edit information relevant to them in the database. This will take a lot of work, and look less than professional. Is there a standard way to allow a logged in user to use an administration-interface-like page to edit their (and only their) entries in a DB/model?
You can probably do what you need by customizing django admin. In django admin you can define get_queryset method to restrict objects available for current user. See https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_queryset, example there matches pretty well to your task
One use case for overriding this method is to show objects owned by the logged-in user...
My code shop is developing a multi-tenant Wagtail site, and we'd like each Site to have its own set of tags. We want this so that tags defined by users of Site A don't appear in the autocompleter or the "popular tags" listing for users of Site B.
Would this be possible with a custom Tag model? I'm thinking that we could prefix the tag's slugs with the hostname of the current Site, then filter them based on that prefix when pulling tags for the "popular tags" listing or the autocompleter.
If this is not currently possible, could Wagtail be monkey-patched to support it? If so, what code might need to change?
A custom tag model would be the way to go, yes. One issue you'd currently have to work around (logged here: https://github.com/wagtail/wagtail/issues/3577) is that the autocomplete view is hard-coded to use the default tag model, so to use a custom one you'd need to duplicate that view in your own app, along with the AdminTagWidget that references it.
Following the tutorial of the djangocms documentation, I've created an apphook to allow users to ask for registration to a list of newsletters. Clicking on the page menu goes to the url(r'^$', views.index, name='index') of the hooked application. It works fine.
I would like to create a second page for the newsletters administrator that will use another instance of the same application but using the url(r'^manage/$', views.manage, name='manage') when the page is selected. Is it possible? I don't find how to configure that.
Thanks a lot for any suggestion.
For the lack of a better way, I have usually created another App Hook and pointed it to another view - that way you can have every major part of the app catered for. If it's just two different pages, this may be the simplest solution.
In a page's advanced settings is the application instance name which is there to enable the same apphook to be used on multiple pages. Setting that would get you two instances of the same apphook.
Alternatively, and perhaps more appropriately, you could split your URLs into a separate file for management. Then you could have a NewsletterManagementAppHook which points to that new set of URLs, separate from the frontend URLs for users. That way you can setup another apphook on another page.
I have two models: Domain and Record. Many records link to a domain. The domains and records have their owners. I want to disallow users to create records in domains that they don't own. However they should be able to edit records if someone else (a superuser e.g.) created them and set owner to that specific user (even if they don't own a domain). This should work both for admin site and for API (rest_framework)
My question is - what is the simplest way to achieve this goal? Is there some django plugin that handles permissions for linking? Can I use model validators here (if so - how to distinguish if a new object is created)?
The problem here is that the Django Rest Framework and Django itself (via admin) are interacting only at the level of the models. In order to achieve your goal I would implement the following design:
Make the models aware of their owners and users. For that I would use django-audit-log.
Overwrite the default model Manager and build your logic in the create method, where I will query the user's attributes and throw appropriate exceptions.
Such a design shifts some of the business logic from the controller to the data model - there are some debates out there about the benefits and pitfalls of such an approach. But with the underlined constraints (Django admin and API) is the only common place where you could put it.
Is this what you are aiming for ?