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

View File

@ -465,17 +465,38 @@ class ConfigViewSet(viewsets.ReadOnlyModelViewSet):
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):
"""List view for all notes images."""
queryset = common.models.NotesImage.objects.all()
serializer_class = common.serializers.NotesImageSerializer
permission_classes = [IsAuthenticatedOrReadScope]
filterset_class = NotesImageFilter
filter_backends = SEARCH_ORDER_FILTER
search_fields = ['user', 'model_type', 'model_id']
def perform_create(self, serializer):
"""Create (upload) a new notes image."""
image = serializer.save()
@ -1501,7 +1522,7 @@ common_api_urls = [
# Webhooks
path('webhook/<slug:endpoint>/', WebhookView.as_view(), name='api-webhook'),
# 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
path(
'background-task/',

View File

@ -3109,22 +3109,8 @@ class NotesImage(models.Model):
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, on_delete=models.CASCADE, null=True, blank=True, related_name='images'
Note, on_delete=models.CASCADE, null=False, blank=False, related_name='images'
)

View File

@ -400,7 +400,7 @@ class NotesImageSerializer(InvenTreeModelSerializer):
"""Meta options for NotesImageSerializer."""
model = common_models.NotesImage
fields = ['pk', 'image', 'user', 'date', 'model_type', 'model_id']
fields = ['pk', 'image', 'user', 'date', 'note']
read_only_fields = ['date', 'user']

View File

@ -253,7 +253,7 @@ export enum ApiEndpoints {
project_code_list = 'project-code/',
custom_unit_list = 'units/',
note_list = 'note/',
notes_image_upload = 'notes-image-upload/',
notes_image_list = 'notes-image/',
email_list = 'admin/email/',
email_test = 'admin/email/test/',
config_list = 'admin/config/',

View File

@ -120,11 +120,11 @@ export default function NotesEditor({
const uploadFile = useCallback(
(file: File) => {
const formData = new FormData();
formData.append('note', String(selectedNoteId));
formData.append('note', selectedNoteId?.toString() ?? '');
formData.append('image', file);
return api
.post(apiUrl(ApiEndpoints.notes_image_upload), formData, {
.post(apiUrl(ApiEndpoints.notes_image_list), formData, {
headers: { 'Content-Type': 'multipart/form-data' }
})
.then((response) => response.data.image);