Ensure subscribe button appears only on relevant models

This commit is contained in:
Jeremy Stretch 2024-07-12 13:36:28 -04:00
parent 4f0cc950bc
commit aa8a891122
3 changed files with 23 additions and 16 deletions

View File

@ -77,7 +77,7 @@ Context:
{% if perms.extras.add_bookmark and object.bookmarks %} {% if perms.extras.add_bookmark and object.bookmarks %}
{% bookmark_button object %} {% bookmark_button object %}
{% endif %} {% endif %}
{% if perms.extras.add_subscription %} {% if perms.extras.add_subscription and object.subscriptions %}
{% subscribe_button object %} {% subscribe_button object %}
{% endif %} {% endif %}
{% if request.user|can_add:object %} {% if request.user|can_add:object %}

View File

@ -1,4 +1,5 @@
{% load i18n %} {% load i18n %}
{% if form_url %}
<form action="{{ form_url }}?return_url={{ return_url }}" method="post"> <form action="{{ form_url }}?return_url={{ return_url }}" method="post">
{% csrf_token %} {% csrf_token %}
{% for field, value in form_data.items %} {% for field, value in form_data.items %}
@ -14,3 +15,4 @@
</button> </button>
{% endif %} {% endif %}
</form> </form>
{% endif %}

View File

@ -4,6 +4,7 @@ from django.urls import NoReverseMatch, reverse
from core.models import ObjectType from core.models import ObjectType
from extras.models import Bookmark, ExportTemplate, Subscription from extras.models import Bookmark, ExportTemplate, Subscription
from netbox.models.features import NotificationsMixin
from utilities.querydict import prepare_cloned_fields from utilities.querydict import prepare_cloned_fields
from utilities.views import get_viewname from utilities.views import get_viewname
@ -97,6 +98,10 @@ def delete_button(instance):
@register.inclusion_tag('buttons/subscribe.html', takes_context=True) @register.inclusion_tag('buttons/subscribe.html', takes_context=True)
def subscribe_button(context, instance): def subscribe_button(context, instance):
# Skip for objects which don't support notifications
if not (issubclass(instance.__class__, NotificationsMixin)):
return {}
# Check if this user has already subscribed to the object # Check if this user has already subscribed to the object
content_type = ContentType.objects.get_for_model(instance) content_type = ContentType.objects.get_for_model(instance)
subscription = Subscription.objects.filter( subscription = Subscription.objects.filter(