mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-11-04 07:05:41 +00:00 
			
		
		
		
	Allow tag fields to be empty (#4816)
Without this change, editing items (e.g. via the admin interface) fails if the tag field is not empty
This commit is contained in:
		
							
								
								
									
										25
									
								
								InvenTree/company/migrations/0058_auto_20230515_0004.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								InvenTree/company/migrations/0058_auto_20230515_0004.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					# Generated by Django 3.2.19 on 2023-05-15 00:04
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.db import migrations
 | 
				
			||||||
 | 
					import taggit.managers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Migration(migrations.Migration):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dependencies = [
 | 
				
			||||||
 | 
					        ('taggit', '0005_auto_20220424_2025'),
 | 
				
			||||||
 | 
					        ('company', '0057_auto_20230427_2033'),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    operations = [
 | 
				
			||||||
 | 
					        migrations.AlterField(
 | 
				
			||||||
 | 
					            model_name='manufacturerpart',
 | 
				
			||||||
 | 
					            name='tags',
 | 
				
			||||||
 | 
					            field=taggit.managers.TaggableManager(blank=True, help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags'),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					        migrations.AlterField(
 | 
				
			||||||
 | 
					            model_name='supplierpart',
 | 
				
			||||||
 | 
					            name='tags',
 | 
				
			||||||
 | 
					            field=taggit.managers.TaggableManager(blank=True, help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags'),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
@@ -311,7 +311,7 @@ class ManufacturerPart(MetadataMixin, models.Model):
 | 
				
			|||||||
        help_text=_('Manufacturer part description')
 | 
					        help_text=_('Manufacturer part description')
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    tags = TaggableManager()
 | 
					    tags = TaggableManager(blank=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
    def create(cls, part, manufacturer, mpn, description, link=None):
 | 
					    def create(cls, part, manufacturer, mpn, description, link=None):
 | 
				
			||||||
@@ -448,7 +448,8 @@ class SupplierPart(MetadataMixin, InvenTreeBarcodeMixin, common.models.MetaMixin
 | 
				
			|||||||
        db_table = 'part_supplierpart'
 | 
					        db_table = 'part_supplierpart'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    objects = SupplierPartManager()
 | 
					    objects = SupplierPartManager()
 | 
				
			||||||
    tags = TaggableManager()
 | 
					
 | 
				
			||||||
 | 
					    tags = TaggableManager(blank=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @staticmethod
 | 
					    @staticmethod
 | 
				
			||||||
    def get_api_url():
 | 
					    def get_api_url():
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										20
									
								
								InvenTree/part/migrations/0107_alter_part_tags.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								InvenTree/part/migrations/0107_alter_part_tags.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					# Generated by Django 3.2.19 on 2023-05-15 00:04
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.db import migrations
 | 
				
			||||||
 | 
					import taggit.managers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Migration(migrations.Migration):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dependencies = [
 | 
				
			||||||
 | 
					        ('taggit', '0005_auto_20220424_2025'),
 | 
				
			||||||
 | 
					        ('part', '0106_part_tags'),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    operations = [
 | 
				
			||||||
 | 
					        migrations.AlterField(
 | 
				
			||||||
 | 
					            model_name='part',
 | 
				
			||||||
 | 
					            name='tags',
 | 
				
			||||||
 | 
					            field=taggit.managers.TaggableManager(blank=True, help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags'),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
@@ -380,7 +380,8 @@ class Part(InvenTreeBarcodeMixin, InvenTreeNotesMixin, MetadataMixin, MPTTModel)
 | 
				
			|||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    objects = PartManager()
 | 
					    objects = PartManager()
 | 
				
			||||||
    tags = TaggableManager()
 | 
					
 | 
				
			||||||
 | 
					    tags = TaggableManager(blank=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
        """Metaclass defines extra model properties"""
 | 
					        """Metaclass defines extra model properties"""
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										25
									
								
								InvenTree/stock/migrations/0100_auto_20230515_0004.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								InvenTree/stock/migrations/0100_auto_20230515_0004.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					# Generated by Django 3.2.19 on 2023-05-15 00:04
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.db import migrations
 | 
				
			||||||
 | 
					import taggit.managers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Migration(migrations.Migration):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dependencies = [
 | 
				
			||||||
 | 
					        ('taggit', '0005_auto_20220424_2025'),
 | 
				
			||||||
 | 
					        ('stock', '0099_alter_stockitem_status'),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    operations = [
 | 
				
			||||||
 | 
					        migrations.AlterField(
 | 
				
			||||||
 | 
					            model_name='stockitem',
 | 
				
			||||||
 | 
					            name='tags',
 | 
				
			||||||
 | 
					            field=taggit.managers.TaggableManager(blank=True, help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags'),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					        migrations.AlterField(
 | 
				
			||||||
 | 
					            model_name='stocklocation',
 | 
				
			||||||
 | 
					            name='tags',
 | 
				
			||||||
 | 
					            field=taggit.managers.TaggableManager(blank=True, help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags'),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
@@ -54,7 +54,7 @@ class StockLocation(InvenTreeBarcodeMixin, MetadataMixin, InvenTreeTree):
 | 
				
			|||||||
        verbose_name = _('Stock Location')
 | 
					        verbose_name = _('Stock Location')
 | 
				
			||||||
        verbose_name_plural = _('Stock Locations')
 | 
					        verbose_name_plural = _('Stock Locations')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    tags = TaggableManager()
 | 
					    tags = TaggableManager(blank=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def delete_recursive(self, *args, **kwargs):
 | 
					    def delete_recursive(self, *args, **kwargs):
 | 
				
			||||||
        """This function handles the recursive deletion of sub-locations depending on kwargs contents"""
 | 
					        """This function handles the recursive deletion of sub-locations depending on kwargs contents"""
 | 
				
			||||||
@@ -324,7 +324,7 @@ class StockItem(InvenTreeBarcodeMixin, InvenTreeNotesMixin, MetadataMixin, commo
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    tags = TaggableManager()
 | 
					    tags = TaggableManager(blank=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # A Query filter which will be re-used in multiple places to determine if a StockItem is actually "in stock"
 | 
					    # A Query filter which will be re-used in multiple places to determine if a StockItem is actually "in stock"
 | 
				
			||||||
    IN_STOCK_FILTER = Q(
 | 
					    IN_STOCK_FILTER = Q(
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user