Guest User

Untitled

a guest
Sep 22nd, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.10 KB | None | 0 0
  1. from django.db import models
  2. from wagtail.wagtailcore.models import Page
  3. from satchless.item import StockedItem
  4. from wagtail.wagtailimages.edit_handlers import ImageChooserPanel
  5. from wagtail.wagtailadmin.edit_handlers import (TabbedInterface, ObjectList,
  6. PageChooserPanel, FieldPanel,
  7. InlinePanel, MultiFieldPanel)
  8. #from wagtail.wagtailadmin.views.pages import PAGE_EDIT_HANDLERS
  9. from wagtail.wagtailcore.fields import RichTextField
  10. from wagtail.wagtailcore.models import Orderable
  11. from wagtail.wagtailadmin.edit_handlers import TabbedInterface, ObjectList
  12.  
  13. from django_prices.models import PriceField
  14. from modelcluster.fields import ParentalKey
  15.  
  16.  
  17. class LinkFields(models.Model):
  18. link_external = models.URLField("External link", blank=True)
  19. link_page = models.ForeignKey(
  20. 'wagtailcore.Page',
  21. null=True,
  22. blank=True,
  23. related_name='+'
  24. )
  25.  
  26. @property
  27. def link(self):
  28. if self.link_page:
  29. return self.link_page.url
  30. else:
  31. return self.link_external
  32.  
  33. panels = [
  34. FieldPanel('link_external'),
  35. PageChooserPanel('link_page'),
  36. ]
  37.  
  38. class Meta:
  39. abstract = True
  40.  
  41.  
  42. class Picture(LinkFields):
  43. image = models.ForeignKey(
  44. 'wagtailimages.Image',
  45. null=True,
  46. blank=True,
  47. on_delete=models.SET_NULL,
  48. related_name='+'
  49. )
  50. embed_url = models.URLField("Embed URL", blank=True)
  51. caption = models.CharField(max_length=255, blank=True)
  52.  
  53. panels = [
  54. ImageChooserPanel('image'),
  55. FieldPanel('embed_url'),
  56. FieldPanel('caption'),
  57. MultiFieldPanel(LinkFields.panels, "Link"),
  58. ]
  59.  
  60. class Meta:
  61. abstract = True
  62.  
  63.  
  64. class ProductPicture(Orderable, Picture):
  65. page = ParentalKey('products.Product', related_name='pictures')
  66.  
  67.  
  68. class Variant(StockedItem, models.Model):
  69. name = models.CharField(max_length=200)
  70. description = RichTextField()
  71. price = PriceField(currency='USD', max_digits=5, decimal_places=2)
  72. size = models.CharField(max_length=3, null=True, blank=True)
  73. color = models.CharField(max_length=10, null=True, blank=True)
  74. product = ParentalKey('products.Product', related_name='variants')
  75. stock = models.IntegerField('In stock')
  76.  
  77. def __str__(self):
  78. return self.name
  79.  
  80. def get_stock(self):
  81. return self.stock
  82.  
  83.  
  84. class Product(Page):
  85. description = RichTextField()
  86.  
  87. @property
  88. def name(self):
  89. return self.title
  90.  
  91. def __str__(self):
  92. return self.name
  93.  
  94.  
  95. Product.content_panels = [
  96. FieldPanel('title'),
  97. FieldPanel('description'),
  98. #InlinePanel(Product, 'pictures', label='Pictures')
  99. ]
  100.  
  101.  
  102. Product.content_panels += [
  103. InlinePanel('pictures', label="Related pictures"),
  104. ]
  105.  
  106.  
  107. Product.variant_panels = [
  108. InlinePanel('variants', label='Variants')
  109. ]
  110.  
  111.  
  112. edit_handlers = TabbedInterface([
  113. ObjectList(Product.content_panels, heading='Product'),
  114. ObjectList(Product.promote_panels, heading='Promote'),
  115. ObjectList(Product.variant_panels, heading='Variants')
  116. ])
  117.  
  118. Product.edit_handler = edit_handlers
Add Comment
Please, Sign In to add comment