Create field for storing os_templates_to_show
This commit is contained in:
		
					parent
					
						
							
								ae911c8c21
							
						
					
				
			
			
				commit
				
					
						5748eecedb
					
				
			
		
					 1 changed files with 38 additions and 0 deletions
				
			
		|  | @ -1,5 +1,7 @@ | ||||||
| import logging | import logging | ||||||
| 
 | 
 | ||||||
|  | from django import forms | ||||||
|  | from django.contrib.postgres.fields import ArrayField | ||||||
| from django.db import models | from django.db import models | ||||||
| 
 | 
 | ||||||
| logger = logging.getLogger(__name__) | logger = logging.getLogger(__name__) | ||||||
|  | @ -32,7 +34,31 @@ class VMTemplate(models.Model): | ||||||
|         return vm_template |         return vm_template | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | class MultipleChoiceArrayField(ArrayField): | ||||||
|  |     """ | ||||||
|  |     A field that allows us to store an array of choices. | ||||||
|  |     Uses Django's Postgres ArrayField | ||||||
|  |     and a MultipleChoiceField for its formfield. | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  |     def formfield(self, **kwargs): | ||||||
|  |         defaults = { | ||||||
|  |             'form_class': forms.MultipleChoiceField, | ||||||
|  |             'choices': self.base_field.choices, | ||||||
|  |             'initial': [c[0] for c in self.base_field.choices], | ||||||
|  |         } | ||||||
|  |         defaults.update(kwargs) | ||||||
|  |         # Skip our parent's formfield implementation completely as we don't | ||||||
|  |         # care for it. | ||||||
|  |         # pylint:disable=bad-super-call | ||||||
|  |         return super(ArrayField, self).formfield(**defaults) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| class VMPricing(models.Model): | class VMPricing(models.Model): | ||||||
|  |     VMTemplateChoices = list( | ||||||
|  |         (str(obj.opennebula_vm_template_id), obj.name) | ||||||
|  |         for obj in VMTemplate.objects.all() | ||||||
|  |     ) | ||||||
|     name = models.CharField(max_length=255, unique=True) |     name = models.CharField(max_length=255, unique=True) | ||||||
|     vat_inclusive = models.BooleanField(default=True) |     vat_inclusive = models.BooleanField(default=True) | ||||||
|     vat_percentage = models.DecimalField( |     vat_percentage = models.DecimalField( | ||||||
|  | @ -55,6 +81,18 @@ class VMPricing(models.Model): | ||||||
|         max_digits=6, decimal_places=2, default=0 |         max_digits=6, decimal_places=2, default=0 | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|  |     vm_templates_to_show = MultipleChoiceArrayField( | ||||||
|  |         base_field=models.CharField( | ||||||
|  |             blank=True, | ||||||
|  |             max_length=256, | ||||||
|  |             choices=VMTemplateChoices | ||||||
|  |         ), | ||||||
|  |         default=list, | ||||||
|  |         blank=True, | ||||||
|  |         help_text="Not selecting any items above will result in showing all " | ||||||
|  |                   "templates" | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|     def __str__(self): |     def __str__(self): | ||||||
|         display_str = self.name + ' => ' + ' - '.join([ |         display_str = self.name + ' => ' + ' - '.join([ | ||||||
|             '{}/Core'.format(self.cores_unit_price.normalize()), |             '{}/Core'.format(self.cores_unit_price.normalize()), | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue