mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +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:
parent
e2505433a2
commit
caa7b84c3e
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(
|
||||||
|
Loading…
Reference in New Issue
Block a user