Updated API endpoints for NotesImage model

This commit is contained in:
Oliver Walters
2026-05-25 12:09:01 +00:00
parent c2e18932db
commit d93d5f9b2f
5 changed files with 29 additions and 22 deletions
+24 -3
View File
@@ -465,17 +465,38 @@ class ConfigViewSet(viewsets.ReadOnlyModelViewSet):
admin_router.register('config', ConfigViewSet, basename='api-config') admin_router.register('config', ConfigViewSet, basename='api-config')
class NotesImageFilter(FilterSet):
"""Filterset for the NotesImage API endpoint."""
class Meta:
"""Metaclass options."""
model = common.models.NotesImage
fields = ['user', 'note']
model_id = rest_filters.NumberFilter(
label=_('Model ID'), field_name='note__model_id'
)
model_type = rest_filters.CharFilter(method='filter_model_type', label='Model Type')
def filter_model_type(self, queryset, name, value):
"""Filter queryset to include only Parameters of the given model type."""
return common.filters.filter_content_type(
queryset, 'note__model_type', value, allow_null=False
)
class NotesImageList(ListCreateAPI): class NotesImageList(ListCreateAPI):
"""List view for all notes images.""" """List view for all notes images."""
queryset = common.models.NotesImage.objects.all() queryset = common.models.NotesImage.objects.all()
serializer_class = common.serializers.NotesImageSerializer serializer_class = common.serializers.NotesImageSerializer
permission_classes = [IsAuthenticatedOrReadScope] permission_classes = [IsAuthenticatedOrReadScope]
filterset_class = NotesImageFilter
filter_backends = SEARCH_ORDER_FILTER filter_backends = SEARCH_ORDER_FILTER
search_fields = ['user', 'model_type', 'model_id']
def perform_create(self, serializer): def perform_create(self, serializer):
"""Create (upload) a new notes image.""" """Create (upload) a new notes image."""
image = serializer.save() image = serializer.save()
@@ -1501,7 +1522,7 @@ common_api_urls = [
# Webhooks # Webhooks
path('webhook/<slug:endpoint>/', WebhookView.as_view(), name='api-webhook'), path('webhook/<slug:endpoint>/', WebhookView.as_view(), name='api-webhook'),
# Uploaded images for notes # Uploaded images for notes
path('notes-image-upload/', NotesImageList.as_view(), name='api-notes-image-list'), path('notes-image/', NotesImageList.as_view(), name='api-notes-image-list'),
# Background task information # Background task information
path( path(
'background-task/', 'background-task/',
+1 -15
View File
@@ -3109,22 +3109,8 @@ class NotesImage(models.Model):
date = models.DateTimeField(auto_now_add=True) date = models.DateTimeField(auto_now_add=True)
model_type = models.CharField(
max_length=100,
blank=True,
null=True,
help_text=_('Target model type for this image'),
)
model_id = models.IntegerField(
help_text=_('Target model ID for this image'),
blank=True,
null=True,
default=None,
)
note = models.ForeignKey( note = models.ForeignKey(
Note, on_delete=models.CASCADE, null=True, blank=True, related_name='images' Note, on_delete=models.CASCADE, null=False, blank=False, related_name='images'
) )
+1 -1
View File
@@ -400,7 +400,7 @@ class NotesImageSerializer(InvenTreeModelSerializer):
"""Meta options for NotesImageSerializer.""" """Meta options for NotesImageSerializer."""
model = common_models.NotesImage model = common_models.NotesImage
fields = ['pk', 'image', 'user', 'date', 'model_type', 'model_id'] fields = ['pk', 'image', 'user', 'date', 'note']
read_only_fields = ['date', 'user'] read_only_fields = ['date', 'user']
+1 -1
View File
@@ -253,7 +253,7 @@ export enum ApiEndpoints {
project_code_list = 'project-code/', project_code_list = 'project-code/',
custom_unit_list = 'units/', custom_unit_list = 'units/',
note_list = 'note/', note_list = 'note/',
notes_image_upload = 'notes-image-upload/', notes_image_list = 'notes-image/',
email_list = 'admin/email/', email_list = 'admin/email/',
email_test = 'admin/email/test/', email_test = 'admin/email/test/',
config_list = 'admin/config/', config_list = 'admin/config/',
@@ -120,11 +120,11 @@ export default function NotesEditor({
const uploadFile = useCallback( const uploadFile = useCallback(
(file: File) => { (file: File) => {
const formData = new FormData(); const formData = new FormData();
formData.append('note', String(selectedNoteId)); formData.append('note', selectedNoteId?.toString() ?? '');
formData.append('image', file); formData.append('image', file);
return api return api
.post(apiUrl(ApiEndpoints.notes_image_upload), formData, { .post(apiUrl(ApiEndpoints.notes_image_list), formData, {
headers: { 'Content-Type': 'multipart/form-data' } headers: { 'Content-Type': 'multipart/form-data' }
}) })
.then((response) => response.data.image); .then((response) => response.data.image);