mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	Allow setting more than one tag in mail rules
The three migrations do the following to preserve existing data in assign_tag: 1. Add the new many-to-many field assign_tags. 2. Copy existing data from the assign_tag field to the assign_tags. 3. Delete the existing assign_tag field.
This commit is contained in:
		| @@ -82,7 +82,7 @@ class MailRuleAdmin(admin.ModelAdmin): | |||||||
|                 ), |                 ), | ||||||
|                 "fields": ( |                 "fields": ( | ||||||
|                     "assign_title_from", |                     "assign_title_from", | ||||||
|                     "assign_tag", |                     "assign_tags", | ||||||
|                     "assign_document_type", |                     "assign_document_type", | ||||||
|                     "assign_correspondent_from", |                     "assign_correspondent_from", | ||||||
|                     "assign_correspondent", |                     "assign_correspondent", | ||||||
|   | |||||||
| @@ -265,7 +265,7 @@ class MailAccountHandler(LoggingMixin): | |||||||
|         ) |         ) | ||||||
|  |  | ||||||
|         correspondent = self.get_correspondent(message, rule) |         correspondent = self.get_correspondent(message, rule) | ||||||
|         tag = rule.assign_tag |         tag_ids = [tag.id for tag in rule.assign_tags.all()] | ||||||
|         doc_type = rule.assign_document_type |         doc_type = rule.assign_document_type | ||||||
|  |  | ||||||
|         processed_attachments = 0 |         processed_attachments = 0 | ||||||
| @@ -328,7 +328,7 @@ class MailAccountHandler(LoggingMixin): | |||||||
|                     if correspondent |                     if correspondent | ||||||
|                     else None, |                     else None, | ||||||
|                     override_document_type_id=doc_type.id if doc_type else None, |                     override_document_type_id=doc_type.id if doc_type else None, | ||||||
|                     override_tag_ids=[tag.id] if tag else None, |                     override_tag_ids=tag_ids, | ||||||
|                     task_name=att.filename[:100], |                     task_name=att.filename[:100], | ||||||
|                 ) |                 ) | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										23
									
								
								src/paperless_mail/migrations/0009_mailrule_assign_tags.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/paperless_mail/migrations/0009_mailrule_assign_tags.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | # Generated by Django 3.2.12 on 2022-03-11 15:00 | ||||||
|  |  | ||||||
|  | from django.db import migrations, models | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  |  | ||||||
|  |     dependencies = [ | ||||||
|  |         ("paperless_mail", "0008_auto_20210516_0940"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     operations = [ | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="assign_tags", | ||||||
|  |             field=models.ManyToManyField( | ||||||
|  |                 blank=True, | ||||||
|  |                 related_name="mail_rules_multi", | ||||||
|  |                 to="documents.Tag", | ||||||
|  |                 verbose_name="assign this tag", | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
							
								
								
									
										26
									
								
								src/paperless_mail/migrations/0010_auto_20220311_1602.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								src/paperless_mail/migrations/0010_auto_20220311_1602.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | # Generated by Django 3.2.12 on 2022-03-11 15:02 | ||||||
|  |  | ||||||
|  | from django.db import migrations | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def migrate_tag(apps, schema_editor): | ||||||
|  |     # Manual data migration, see | ||||||
|  |     # https://docs.djangoproject.com/en/3.2/topics/migrations/#data-migrations | ||||||
|  |     # | ||||||
|  |     # Copy the assign_tag property to the new assign_tags set if it exists. | ||||||
|  |     MailRule = apps.get_model("paperless_mail", "MailRule") | ||||||
|  |     for mail_rule in MailRule.objects.all(): | ||||||
|  |         if mail_rule.assign_tag: | ||||||
|  |             mail_rule.assign_tags.add(mail_rule.assign_tag) | ||||||
|  |             mail_rule.save() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  |  | ||||||
|  |     dependencies = [ | ||||||
|  |         ("paperless_mail", "0009_mailrule_assign_tags"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     operations = [ | ||||||
|  |         migrations.RunPython(migrate_tag), | ||||||
|  |     ] | ||||||
| @@ -0,0 +1,17 @@ | |||||||
|  | # Generated by Django 3.2.12 on 2022-03-11 15:18 | ||||||
|  |  | ||||||
|  | from django.db import migrations | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  |  | ||||||
|  |     dependencies = [ | ||||||
|  |         ("paperless_mail", "0010_auto_20220311_1602"), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     operations = [ | ||||||
|  |         migrations.RemoveField( | ||||||
|  |             model_name="mailrule", | ||||||
|  |             name="assign_tag", | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
| @@ -169,11 +169,10 @@ class MailRule(models.Model): | |||||||
|         default=TitleSource.FROM_SUBJECT, |         default=TitleSource.FROM_SUBJECT, | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|     assign_tag = models.ForeignKey( |     assign_tags = models.ManyToManyField( | ||||||
|         document_models.Tag, |         document_models.Tag, | ||||||
|         null=True, |  | ||||||
|         blank=True, |         blank=True, | ||||||
|         on_delete=models.SET_NULL, |         related_name="mail_rules_multi", | ||||||
|         verbose_name=_("assign this tag"), |         verbose_name=_("assign this tag"), | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 jonasc
					jonasc