diff --git a/InvenTree/company/api.py b/InvenTree/company/api.py index e0ac1b804a..a5f3361d38 100644 --- a/InvenTree/company/api.py +++ b/InvenTree/company/api.py @@ -193,7 +193,7 @@ class SupplierPartList(generics.ListCreateAPIView): queryset = SupplierPart.objects.all().prefetch_related( 'part', 'supplier', - 'manufacturer' + 'manufacturer_part', ) def get_queryset(self): diff --git a/InvenTree/company/migrations/0032_manufacturerpart.py b/InvenTree/company/migrations/0032_manufacturerpart.py index 2504897fff..e73bcf9b05 100644 --- a/InvenTree/company/migrations/0032_manufacturerpart.py +++ b/InvenTree/company/migrations/0032_manufacturerpart.py @@ -67,10 +67,10 @@ class Migration(migrations.Migration): name='ManufacturerPart', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('MPN', models.CharField(blank=True, help_text='Manufacturer Part Number', max_length=100, null=True, verbose_name='MPN')), + ('MPN', models.CharField(help_text='Manufacturer Part Number', max_length=100, null=True, verbose_name='MPN')), ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='URL for external manufacturer part link', null=True, verbose_name='Link')), ('description', models.CharField(blank=True, help_text='Manufacturer part description', max_length=250, null=True, verbose_name='Description')), - ('manufacturer', models.ForeignKey(blank=True, help_text='Select manufacturer', limit_choices_to={'is_manufacturer': True}, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='manufacturer_parts', to='company.Company', verbose_name='Manufacturer')), + ('manufacturer', models.ForeignKey(help_text='Select manufacturer', limit_choices_to={'is_manufacturer': True}, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='manufacturer_parts', to='company.Company', verbose_name='Manufacturer')), ('part', models.ForeignKey(help_text='Select part', limit_choices_to={'purchaseable': True}, on_delete=django.db.models.deletion.CASCADE, related_name='manufacturer_parts', to='part.Part', verbose_name='Base Part')), ], options={ @@ -85,17 +85,6 @@ class Migration(migrations.Migration): # Make new ManufacturerPart with SupplierPart "manufacturer" and "MPN" # fields, then link it to the new SupplierPart "manufacturer_part" field migrations.RunPython(supplierpart_make_manufacturer_parts), - # Make ManufacturerPart "manufacturer" and "MPN" field mandatory - migrations.AlterField( - model_name='ManufacturerPart', - name='manufacturer', - field=models.ForeignKey(help_text='Select manufacturer', limit_choices_to={'is_manufacturer': True}, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='manufacturer_parts', to='company.Company', verbose_name='Manufacturer'), - ), - migrations.AlterField( - model_name='ManufacturerPart', - name='MPN', - field=models.CharField(help_text='Manufacturer Part Number', max_length=100, null=True, verbose_name='MPN'), - ), migrations.RemoveField( model_name='supplierpart', name='MPN', diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index 80ac0220b0..a2e5abdd9e 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -335,6 +335,17 @@ class ManufacturerPart(models.Model): help_text=_('Manufacturer part description') ) + def __str__(self): + s = '' + + if self.manufacturer: + s += f'{self.manufacturer.name}' + s += ' | ' + + s += f'{self.MPN}' + + return s + class SupplierPart(models.Model): """ Represents a unique part as provided by a Supplier diff --git a/InvenTree/company/serializers.py b/InvenTree/company/serializers.py index bf846c2d04..80734d2225 100644 --- a/InvenTree/company/serializers.py +++ b/InvenTree/company/serializers.py @@ -110,7 +110,7 @@ class ManufacturerPartSerializer(InvenTreeModelSerializer): manufacturer = serializers.PrimaryKeyRelatedField(queryset=Company.objects.filter(is_manufacturer=True)) class Meta: - model = SupplierPart + model = ManufacturerPart fields = [ 'pk', 'part', @@ -131,7 +131,7 @@ class SupplierPartSerializer(InvenTreeModelSerializer): supplier_detail = CompanyBriefSerializer(source='supplier', many=False, read_only=True) - manufacturer_detail = CompanyBriefSerializer(source='manufacturer', many=False, read_only=True) + manufacturer_detail = ManufacturerPartSerializer(source='manufacturer_part', many=False, read_only=True) pretty_name = serializers.CharField(read_only=True) @@ -157,8 +157,10 @@ class SupplierPartSerializer(InvenTreeModelSerializer): self.fields.pop('pretty_name') supplier = serializers.PrimaryKeyRelatedField(queryset=Company.objects.filter(is_supplier=True)) - - manufacturer_part = serializers.PrimaryKeyRelatedField(queryset=ManufacturerPart.objects.all()) + + manufacturer = ManufacturerPartSerializer(many=False, read_only=True) + + MPN = ManufacturerPartSerializer(many=False, read_only=True) class Meta: model = SupplierPart @@ -170,7 +172,8 @@ class SupplierPartSerializer(InvenTreeModelSerializer): 'supplier', 'supplier_detail', 'SKU', - 'manufacturer_part', + 'manufacturer', + 'MPN', 'manufacturer_detail', 'description', 'link',