mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-11-04 07:05:41 +00:00 
			
		
		
		
	@@ -8,6 +8,9 @@ from __future__ import unicode_literals
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from rest_framework import serializers
 | 
					from rest_framework import serializers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.conf import settings
 | 
				
			||||||
from django.contrib.auth.models import User
 | 
					from django.contrib.auth.models import User
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -50,3 +53,32 @@ class InvenTreeModelSerializer(serializers.ModelSerializer):
 | 
				
			|||||||
        instance.clean()
 | 
					        instance.clean()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return data
 | 
					        return data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class InvenTreeAttachmentSerializerField(serializers.FileField):
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    Override the DRF native FileField serializer,
 | 
				
			||||||
 | 
					    to remove the leading server path.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    For example, the FileField might supply something like:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://127.0.0.1:8000/media/foo/bar.jpg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Whereas we wish to return:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /media/foo/bar.jpg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Why? You can't handle the why!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Actually, if the server process is serving the data at 127.0.0.1,
 | 
				
			||||||
 | 
					    but a proxy service (e.g. nginx) is then providing DNS lookup to the outside world,
 | 
				
			||||||
 | 
					    then an attachment which prefixes the "address" of the internal server
 | 
				
			||||||
 | 
					    will not be accessible from the outside world.
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def to_representation(self, value):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if not value:
 | 
				
			||||||
 | 
					            return None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return os.path.join(str(settings.MEDIA_URL), str(value))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,6 +10,8 @@ from rest_framework import serializers
 | 
				
			|||||||
from django.db.models import Count
 | 
					from django.db.models import Count
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from InvenTree.serializers import InvenTreeModelSerializer
 | 
					from InvenTree.serializers import InvenTreeModelSerializer
 | 
				
			||||||
 | 
					from InvenTree.serializers import InvenTreeAttachmentSerializerField
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from company.serializers import CompanyBriefSerializer, SupplierPartSerializer
 | 
					from company.serializers import CompanyBriefSerializer, SupplierPartSerializer
 | 
				
			||||||
from part.serializers import PartBriefSerializer
 | 
					from part.serializers import PartBriefSerializer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -112,6 +114,8 @@ class POAttachmentSerializer(InvenTreeModelSerializer):
 | 
				
			|||||||
    Serializers for the PurchaseOrderAttachment model
 | 
					    Serializers for the PurchaseOrderAttachment model
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    attachment = InvenTreeAttachmentSerializerField(required=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
        model = PurchaseOrderAttachment
 | 
					        model = PurchaseOrderAttachment
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
@@ -255,6 +259,8 @@ class SOAttachmentSerializer(InvenTreeModelSerializer):
 | 
				
			|||||||
    Serializers for the SalesOrderAttachment model
 | 
					    Serializers for the SalesOrderAttachment model
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    attachment = InvenTreeAttachmentSerializerField(required=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
        model = SalesOrderAttachment
 | 
					        model = SalesOrderAttachment
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@ from django.db.models.functions import Coalesce
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from InvenTree.status_codes import StockStatus, PurchaseOrderStatus, BuildStatus
 | 
					from InvenTree.status_codes import StockStatus, PurchaseOrderStatus, BuildStatus
 | 
				
			||||||
from InvenTree.serializers import InvenTreeModelSerializer
 | 
					from InvenTree.serializers import InvenTreeModelSerializer
 | 
				
			||||||
 | 
					from InvenTree.serializers import InvenTreeAttachmentSerializerField
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CategorySerializer(InvenTreeModelSerializer):
 | 
					class CategorySerializer(InvenTreeModelSerializer):
 | 
				
			||||||
@@ -46,6 +47,8 @@ class PartAttachmentSerializer(InvenTreeModelSerializer):
 | 
				
			|||||||
    Serializer for the PartAttachment class
 | 
					    Serializer for the PartAttachment class
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    attachment = InvenTreeAttachmentSerializerField(required=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
        model = PartAttachment
 | 
					        model = PartAttachment
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,6 +15,7 @@ from django.db.models.functions import Coalesce
 | 
				
			|||||||
from company.serializers import SupplierPartSerializer
 | 
					from company.serializers import SupplierPartSerializer
 | 
				
			||||||
from part.serializers import PartBriefSerializer
 | 
					from part.serializers import PartBriefSerializer
 | 
				
			||||||
from InvenTree.serializers import UserSerializerBrief, InvenTreeModelSerializer
 | 
					from InvenTree.serializers import UserSerializerBrief, InvenTreeModelSerializer
 | 
				
			||||||
 | 
					from InvenTree.serializers import InvenTreeAttachmentSerializerField
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class LocationBriefSerializer(InvenTreeModelSerializer):
 | 
					class LocationBriefSerializer(InvenTreeModelSerializer):
 | 
				
			||||||
@@ -211,6 +212,8 @@ class StockItemAttachmentSerializer(InvenTreeModelSerializer):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    user_detail = UserSerializerBrief(source='user', read_only=True)
 | 
					    user_detail = UserSerializerBrief(source='user', read_only=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    attachment = InvenTreeAttachmentSerializerField(required=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
        model = StockItemAttachment
 | 
					        model = StockItemAttachment
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -224,6 +227,12 @@ class StockItemAttachmentSerializer(InvenTreeModelSerializer):
 | 
				
			|||||||
            'user_detail',
 | 
					            'user_detail',
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        read_only_fields = [
 | 
				
			||||||
 | 
					            'upload_date',
 | 
				
			||||||
 | 
					            'user',
 | 
				
			||||||
 | 
					            'user_detail'
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class StockItemTestResultSerializer(InvenTreeModelSerializer):
 | 
					class StockItemTestResultSerializer(InvenTreeModelSerializer):
 | 
				
			||||||
    """ Serializer for the StockItemTestResult model """
 | 
					    """ Serializer for the StockItemTestResult model """
 | 
				
			||||||
@@ -232,6 +241,8 @@ class StockItemTestResultSerializer(InvenTreeModelSerializer):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    key = serializers.CharField(read_only=True)
 | 
					    key = serializers.CharField(read_only=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    attachment = InvenTreeAttachmentSerializerField(required=False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, *args, **kwargs):
 | 
					    def __init__(self, *args, **kwargs):
 | 
				
			||||||
        user_detail = kwargs.pop('user_detail', False)
 | 
					        user_detail = kwargs.pop('user_detail', False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user