Remove legacy "notes" field from older models
This commit is contained in:
parent
be132bf21d
commit
256cae228f
|
|
@ -27,7 +27,6 @@ from stdimage.models import StdImageField
|
|||
|
||||
import common.settings
|
||||
import InvenTree.exceptions
|
||||
import InvenTree.fields
|
||||
import InvenTree.format
|
||||
import InvenTree.helpers
|
||||
import InvenTree.helpers_model
|
||||
|
|
@ -664,16 +663,15 @@ class InvenTreeNoteMixin(InvenTreePermissionCheckMixin):
|
|||
'common.Note', content_type_field='model_type', object_id_field='model_id'
|
||||
)
|
||||
|
||||
# TODO: Un-comment this once the InvenTreeNotesMixin class is removed
|
||||
# @property
|
||||
# def notes(self) -> QuerySet:
|
||||
# """Return a queryset containing all notes for this model."""
|
||||
# # Check the query cache for pre-fetched parameters
|
||||
# if cache := getattr(self, '_prefetched_objects_cache', None):
|
||||
# if 'notes_list' in cache:
|
||||
# return cache['notes_list']
|
||||
@property
|
||||
def notes(self) -> QuerySet:
|
||||
"""Return a queryset containing all notes for this model."""
|
||||
# Check the query cache for pre-fetched parameters
|
||||
if cache := getattr(self, '_prefetched_objects_cache', None):
|
||||
if 'notes_list' in cache:
|
||||
return cache['notes_list']
|
||||
|
||||
# return self.notes_list.all()
|
||||
return self.notes_list.all()
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
"""Handle the deletion of a model instance.
|
||||
|
|
@ -1284,53 +1282,6 @@ class PathStringMixin(models.Model):
|
|||
]
|
||||
|
||||
|
||||
class InvenTreeNotesMixin(models.Model):
|
||||
"""A mixin class for adding notes functionality to a model class.
|
||||
|
||||
The following fields are added to any model which implements this mixin:
|
||||
|
||||
- notes : A text field for storing notes
|
||||
"""
|
||||
|
||||
# TODO: THIS MIXIN IS TO BE REMOVED IN FAVOUR OF THE GENERIC RELATIONSHIP TO THE Note MODEL
|
||||
|
||||
class Meta:
|
||||
"""Metaclass options for this mixin.
|
||||
|
||||
Note: abstract must be true, as this is only a mixin, not a separate table
|
||||
"""
|
||||
|
||||
abstract = True
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
"""Custom delete method for InvenTreeNotesMixin.
|
||||
|
||||
- Before deleting the object, check if there are any uploaded images associated with it.
|
||||
- If so, delete the notes first
|
||||
"""
|
||||
from common.models import NotesImage
|
||||
|
||||
images = NotesImage.objects.filter(
|
||||
model_type=self.__class__.__name__.lower(), model_id=self.pk
|
||||
)
|
||||
|
||||
if images.exists():
|
||||
logger.info(
|
||||
'Deleting %s uploaded images associated with %s <%s>',
|
||||
images.count(),
|
||||
self.__class__.__name__,
|
||||
self.pk,
|
||||
)
|
||||
|
||||
images.delete()
|
||||
|
||||
super().delete(*args, **kwargs)
|
||||
|
||||
notes = InvenTree.fields.InvenTreeNotesField(
|
||||
verbose_name=_('Notes'), help_text=_('Markdown notes (optional)')
|
||||
)
|
||||
|
||||
|
||||
class InvenTreeBarcodeMixin(models.Model):
|
||||
"""A mixin class for adding barcode functionality to a model class.
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 5.2.14 on 2026-05-25 12:36
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("build", "0058_buildline_consumed"),
|
||||
("common", "0046_remove_notesimage_model_id_and_more")
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name="build",
|
||||
name="notes",
|
||||
),
|
||||
]
|
||||
|
|
@ -80,7 +80,6 @@ class Build(
|
|||
InvenTree.models.InvenTreeAttachmentMixin,
|
||||
InvenTree.models.InvenTreeBarcodeMixin,
|
||||
InvenTree.models.InvenTreeNoteMixin,
|
||||
InvenTree.models.InvenTreeNotesMixin,
|
||||
InvenTree.models.ReferenceIndexingMixin,
|
||||
StateTransitionMixin,
|
||||
StatusCodeMixin,
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@ from InvenTree.serializers import (
|
|||
FilterableSerializerMixin,
|
||||
InvenTreeDecimalField,
|
||||
InvenTreeModelSerializer,
|
||||
NotesFieldMixin,
|
||||
OptionalField,
|
||||
)
|
||||
from stock.generators import generate_batch_code
|
||||
|
|
@ -53,7 +52,6 @@ from .status_codes import BuildStatus
|
|||
|
||||
class BuildSerializer(
|
||||
FilterableSerializerMixin,
|
||||
NotesFieldMixin,
|
||||
DataImportExportSerializerMixin,
|
||||
InvenTreeCustomStatusSerializerMixin,
|
||||
InvenTreeModelSerializer,
|
||||
|
|
@ -91,7 +89,6 @@ class BuildSerializer(
|
|||
'status_custom_key',
|
||||
'target_date',
|
||||
'take_from',
|
||||
'notes',
|
||||
'link',
|
||||
'issued_by',
|
||||
'issued_by_detail',
|
||||
|
|
@ -1503,12 +1500,9 @@ class BuildLineSerializer(
|
|||
# Defer expensive fields which we do not need for this serializer
|
||||
|
||||
queryset = queryset.defer(
|
||||
'build__notes',
|
||||
'build__metadata',
|
||||
'bom_item__metadata',
|
||||
'bom_item__part__notes',
|
||||
'bom_item__part__metadata',
|
||||
'bom_item__sub_part__notes',
|
||||
'bom_item__sub_part__metadata',
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
# Generated by Django 5.2.14 on 2026-05-25 12:36
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("company", "0079_auto_20260212_1054"),
|
||||
("common", "0046_remove_notesimage_model_id_and_more")
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name="company",
|
||||
name="notes",
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name="manufacturerpart",
|
||||
name="notes",
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name="supplierpart",
|
||||
name="notes",
|
||||
),
|
||||
]
|
||||
|
|
@ -80,7 +80,6 @@ class Company(
|
|||
InvenTree.models.InvenTreeAttachmentMixin,
|
||||
InvenTree.models.InvenTreeParameterMixin,
|
||||
InvenTree.models.InvenTreeNoteMixin,
|
||||
InvenTree.models.InvenTreeNotesMixin,
|
||||
report.mixins.InvenTreeReportMixin,
|
||||
InvenTree.models.InvenTreeImageMixin,
|
||||
InvenTree.models.InvenTreeMetadataModel,
|
||||
|
|
@ -488,7 +487,6 @@ class ManufacturerPart(
|
|||
InvenTree.models.InvenTreeParameterMixin,
|
||||
InvenTree.models.InvenTreeBarcodeMixin,
|
||||
InvenTree.models.InvenTreeNoteMixin,
|
||||
InvenTree.models.InvenTreeNotesMixin,
|
||||
InvenTree.models.InvenTreeMetadataModel,
|
||||
):
|
||||
"""Represents a unique part as provided by a Manufacturer Each ManufacturerPart is identified by a MPN (Manufacturer Part Number) Each ManufacturerPart is also linked to a Part object. A Part may be available from multiple manufacturers.
|
||||
|
|
@ -606,7 +604,6 @@ class SupplierPart(
|
|||
InvenTree.models.MetadataMixin,
|
||||
InvenTree.models.InvenTreeBarcodeMixin,
|
||||
InvenTree.models.InvenTreeNoteMixin,
|
||||
InvenTree.models.InvenTreeNotesMixin,
|
||||
common.models.MetaMixin,
|
||||
InvenTree.models.InvenTreeModel,
|
||||
):
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ from InvenTree.serializers import (
|
|||
InvenTreeModelSerializer,
|
||||
InvenTreeMoneySerializer,
|
||||
InvenTreeTagModelSerializer,
|
||||
NotesFieldMixin,
|
||||
OptionalField,
|
||||
)
|
||||
|
||||
|
|
@ -106,10 +105,7 @@ class AddressBriefSerializer(InvenTreeModelSerializer):
|
|||
|
||||
@register_importer()
|
||||
class CompanySerializer(
|
||||
FilterableSerializerMixin,
|
||||
DataImportExportSerializerMixin,
|
||||
NotesFieldMixin,
|
||||
InvenTreeModelSerializer,
|
||||
FilterableSerializerMixin, DataImportExportSerializerMixin, InvenTreeModelSerializer
|
||||
):
|
||||
"""Serializer for Company object (full detail)."""
|
||||
|
||||
|
|
@ -137,7 +133,6 @@ class CompanySerializer(
|
|||
'is_customer',
|
||||
'is_manufacturer',
|
||||
'is_supplier',
|
||||
'notes',
|
||||
'parts_supplied',
|
||||
'parts_manufactured',
|
||||
'primary_address',
|
||||
|
|
@ -208,7 +203,6 @@ class ManufacturerPartSerializer(
|
|||
FilterableSerializerMixin,
|
||||
DataImportExportSerializerMixin,
|
||||
InvenTreeTagModelSerializer,
|
||||
NotesFieldMixin,
|
||||
):
|
||||
"""Serializer for ManufacturerPart object."""
|
||||
|
||||
|
|
@ -227,7 +221,6 @@ class ManufacturerPartSerializer(
|
|||
'MPN',
|
||||
'link',
|
||||
'barcode_hash',
|
||||
'notes',
|
||||
'tags',
|
||||
'parameters',
|
||||
]
|
||||
|
|
@ -309,7 +302,6 @@ class SupplierPartSerializer(
|
|||
FilterableSerializerMixin,
|
||||
DataImportExportSerializerMixin,
|
||||
InvenTreeTagModelSerializer,
|
||||
NotesFieldMixin,
|
||||
):
|
||||
"""Serializer for SupplierPart object."""
|
||||
|
||||
|
|
@ -354,7 +346,6 @@ class SupplierPartSerializer(
|
|||
'supplier',
|
||||
'supplier_detail',
|
||||
'updated',
|
||||
'notes',
|
||||
'part_detail',
|
||||
'tags',
|
||||
'price_breaks',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,34 @@
|
|||
# Generated by Django 5.2.14 on 2026-05-25 12:36
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("order", "0119_transferorderlineitem_line_int"),
|
||||
("common", "0046_remove_notesimage_model_id_and_more")
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name="purchaseorder",
|
||||
name="notes",
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name="returnorder",
|
||||
name="notes",
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name="salesorder",
|
||||
name="notes",
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name="salesordershipment",
|
||||
name="notes",
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name="transferorder",
|
||||
name="notes",
|
||||
),
|
||||
]
|
||||
|
|
@ -300,7 +300,6 @@ class Order(
|
|||
InvenTree.models.InvenTreeAttachmentMixin,
|
||||
InvenTree.models.InvenTreeBarcodeMixin,
|
||||
InvenTree.models.InvenTreeNoteMixin,
|
||||
InvenTree.models.InvenTreeNotesMixin,
|
||||
report.mixins.InvenTreeReportMixin,
|
||||
InvenTree.models.MetadataMixin,
|
||||
InvenTree.models.ReferenceIndexingMixin,
|
||||
|
|
@ -2331,7 +2330,6 @@ class SalesOrderShipment(
|
|||
InvenTree.models.InvenTreeAttachmentMixin,
|
||||
InvenTree.models.InvenTreeBarcodeMixin,
|
||||
InvenTree.models.InvenTreeNoteMixin,
|
||||
InvenTree.models.InvenTreeNotesMixin,
|
||||
report.mixins.InvenTreeReportMixin,
|
||||
InvenTree.models.MetadataMixin,
|
||||
InvenTree.models.InvenTreeModel,
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ from InvenTree.serializers import (
|
|||
InvenTreeDecimalField,
|
||||
InvenTreeModelSerializer,
|
||||
InvenTreeMoneySerializer,
|
||||
NotesFieldMixin,
|
||||
OptionalField,
|
||||
)
|
||||
from order.status_codes import (
|
||||
|
|
@ -104,9 +103,9 @@ class AbstractOrderSerializer(
|
|||
):
|
||||
"""Abstract serializer class which provides fields common to all order types."""
|
||||
|
||||
export_exclude_fields = ['notes', 'duplicate']
|
||||
export_exclude_fields = ['duplicate']
|
||||
|
||||
import_exclude_fields = ['notes', 'duplicate']
|
||||
import_exclude_fields = ['duplicate']
|
||||
|
||||
# Number of line items in this order
|
||||
line_items = serializers.IntegerField(
|
||||
|
|
@ -224,7 +223,6 @@ class AbstractOrderSerializer(
|
|||
'status',
|
||||
'status_text',
|
||||
'status_custom_key',
|
||||
'notes',
|
||||
'barcode_hash',
|
||||
'overdue',
|
||||
'duplicate',
|
||||
|
|
@ -373,7 +371,6 @@ class AbstractExtraLineMeta:
|
|||
|
||||
@register_importer()
|
||||
class PurchaseOrderSerializer(
|
||||
NotesFieldMixin,
|
||||
TotalPriceMixin,
|
||||
InvenTreeCustomStatusSerializerMixin,
|
||||
AbstractOrderSerializer,
|
||||
|
|
@ -1060,7 +1057,6 @@ class PurchaseOrderReceiveSerializer(serializers.Serializer):
|
|||
|
||||
@register_importer()
|
||||
class SalesOrderSerializer(
|
||||
NotesFieldMixin,
|
||||
TotalPriceMixin,
|
||||
InvenTreeCustomStatusSerializerMixin,
|
||||
AbstractOrderSerializer,
|
||||
|
|
@ -1360,10 +1356,7 @@ class SalesOrderLineItemSerializer(
|
|||
|
||||
@register_importer()
|
||||
class SalesOrderShipmentSerializer(
|
||||
DataImportExportSerializerMixin,
|
||||
FilterableSerializerMixin,
|
||||
NotesFieldMixin,
|
||||
InvenTreeModelSerializer,
|
||||
DataImportExportSerializerMixin, FilterableSerializerMixin, InvenTreeModelSerializer
|
||||
):
|
||||
"""Serializer for the SalesOrderShipment class."""
|
||||
|
||||
|
|
@ -2015,7 +2008,6 @@ class SalesOrderExtraLineSerializer(
|
|||
|
||||
@register_importer()
|
||||
class ReturnOrderSerializer(
|
||||
NotesFieldMixin,
|
||||
InvenTreeCustomStatusSerializerMixin,
|
||||
AbstractOrderSerializer,
|
||||
TotalPriceMixin,
|
||||
|
|
@ -2303,7 +2295,6 @@ class ReturnOrderExtraLineSerializer(
|
|||
|
||||
@register_importer()
|
||||
class TransferOrderSerializer(
|
||||
NotesFieldMixin,
|
||||
InvenTreeCustomStatusSerializerMixin,
|
||||
AbstractOrderSerializer,
|
||||
InvenTreeModelSerializer,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 5.2.14 on 2026-05-25 12:36
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("part", "0150_part_maximum_stock"),
|
||||
("common", "0046_remove_notesimage_model_id_and_more")
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name="part",
|
||||
name="notes",
|
||||
),
|
||||
]
|
||||
|
|
@ -466,7 +466,6 @@ class Part(
|
|||
InvenTree.models.InvenTreeAttachmentMixin,
|
||||
InvenTree.models.InvenTreeBarcodeMixin,
|
||||
InvenTree.models.InvenTreeNoteMixin,
|
||||
InvenTree.models.InvenTreeNotesMixin,
|
||||
report.mixins.InvenTreeReportMixin,
|
||||
InvenTree.models.InvenTreeImageMixin,
|
||||
InvenTree.models.MetadataMixin,
|
||||
|
|
|
|||
|
|
@ -577,7 +577,6 @@ class DefaultLocationSerializer(InvenTree.serializers.InvenTreeModelSerializer):
|
|||
class PartSerializer(
|
||||
InvenTree.serializers.FilterableSerializerMixin,
|
||||
DataImportExportSerializerMixin,
|
||||
InvenTree.serializers.NotesFieldMixin,
|
||||
InvenTree.serializers.InvenTreeTaggitSerializer,
|
||||
InvenTree.serializers.InvenTreeModelSerializer,
|
||||
):
|
||||
|
|
@ -619,7 +618,6 @@ class PartSerializer(
|
|||
'minimum_stock',
|
||||
'maximum_stock',
|
||||
'name',
|
||||
'notes',
|
||||
'parameters',
|
||||
'pk',
|
||||
'purchaseable',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 5.2.14 on 2026-05-25 12:36
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("stock", "0119_alter_stockitemtestresult_date"),
|
||||
("common", "0046_remove_notesimage_model_id_and_more")
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name="stockitem",
|
||||
name="notes",
|
||||
),
|
||||
]
|
||||
|
|
@ -404,7 +404,6 @@ class StockItem(
|
|||
InvenTree.models.InvenTreeAttachmentMixin,
|
||||
InvenTree.models.InvenTreeBarcodeMixin,
|
||||
InvenTree.models.InvenTreeNoteMixin,
|
||||
InvenTree.models.InvenTreeNotesMixin,
|
||||
StatusCodeMixin,
|
||||
report.mixins.InvenTreeReportMixin,
|
||||
common.models.MetaMixin,
|
||||
|
|
|
|||
|
|
@ -356,7 +356,6 @@ class StockItemSerializer(
|
|||
'in_stock',
|
||||
'is_building',
|
||||
'link',
|
||||
'notes',
|
||||
'owner',
|
||||
'packaging',
|
||||
'parent',
|
||||
|
|
|
|||
Loading…
Reference in New Issue