Guest User

Untitled

a guest
Jan 18th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.67 KB | None | 0 0
  1. class LodgingOfferManager(models.Manager):
  2. def active(self, *args, **kwargs):
  3. return super(LodgingOfferManager, self).filter(is_taked=False).filter(pub_date__lte=timezone.now())
  4.  
  5. def get_images_search_path(instance, filename):
  6. return '/'.join(['lodging_offer_images', instance.slug, filename])
  7.  
  8. class LodgingOffer(models.Model):
  9.  
  10. created_by = models.ForeignKey(settings.AUTH_USER_MODEL,
  11. on_delete=models.CASCADE)
  12.  
  13. ad_title = models.CharField(null=False, blank=False, max_length=255, verbose_name='Título de la oferta')
  14.  
  15. photo = models.ImageField(upload_to=get_images_search_path,
  16. blank=False, verbose_name='Fotografía',
  17. null=False)
  18.  
  19. pub_date = models.DateTimeField(auto_now_add=True)
  20.  
  21. is_taked = models.BooleanField(_('Oferta tomada'),
  22. default=False,)
  23.  
  24. objects = LodgingOfferManager()
  25.  
  26. def __str__(self):
  27. return "%s" % self.ad_title
  28.  
  29. class LodgingOfferSearchForm(forms.Form):
  30. query = forms.CharField(label='', widget=forms.TextInput())
  31.  
  32. class LodgingOfferSearch(FormView):
  33. template_name = 'hosts/lodgingoffer_search.html'
  34.  
  35. form_class = LodgingOfferSearchForm()
  36.  
  37. def get(self, request, *args, **kwargs):
  38. form = LodgingOfferSearchForm(self.request.GET or None)
  39. return self.render_to_response(self.get_context_data(form=form))
  40.  
  41. # We get the active object records
  42. # I think that this is not necessary ... ?
  43. def get_queryset(self):
  44. qs = LodgingOffer.objects.active()
  45. return qs
  46.  
  47. def get_context_data(self, **kwargs):
  48. context = super(LodgingOfferSearch, self).get_context_data(**kwargs)
  49. user = self.request.user
  50. form = LodgingOfferSearchForm(self.request.GET or None)
  51. qs = LodgingOffer.objects.active()
  52.  
  53. # We pass the results set active offer_list to template via context
  54. context['offer_list'] = qs
  55.  
  56. # We ask if the form is valid, when perform a search
  57. if form.is_valid():
  58. cd = form.cleaned_data
  59.  
  60. # We get the results with from haystack.query import SearchQuerySet()
  61. # detailing query from form.
  62. results = SearchQuerySet().models(LodgingOffer)
  63. .filter(content=cd['query']).load_all()
  64.  
  65. # Send some context variables to template
  66. total_results = results.count()
  67. context.update({
  68. 'cd': cd,
  69. 'results':results,
  70. 'total_results': total_results,
  71.  
  72. })
  73. if user.is_authenticated():
  74. context['userprofile'] = user.profile
  75. return context
  76.  
  77. <!-- We render the form input to perform the search -->
  78. <form action="." method="get">
  79. <input type="submit" value="Buscar" class="submit-button">
  80. <div class="formgroup">
  81. <span></span>
  82. {{ form.query }}
  83. </div> <br />
  84. </form>
  85.  
  86. <!-- We iterate through offer_list active records existing objects -->
  87. {% for offers in offer_list %}
  88. <article class="host full-width" >
  89. <a href="{% url 'host:detail' offers.slug %}">
  90. <div class="img-title-cont">
  91. {% if offers.photo %}
  92. <div class="img" style="background: url('{{ offers.photo.url }}') no-repeat center; background-size:cover;"></div>
  93. {% endif %}
  94. <div class="title-cont">
  95. <h3>{{ offers.ad_title }}</h3>
  96. </div>
  97. </div>
  98. </a>
  99. </article>
  100. {% endfor %}
  101.  
  102.  
  103. <!-- We ask if the query is present in the request.GET to perform search -->
  104.  
  105. {% if "query" in request.GET %}<br />
  106. <p><h3>Ofertas de alojamiento que contengan: "{{ cd.query }}"</h3></p>
  107. <span>Encontrados cerca de {{ total_results }} resultado{{ total_results|pluralize }}</span>
  108. <br /><br />
  109.  
  110. <!-- We iterate in results set from search performed -->
  111. {% for result in results %}
  112. {% with lodgingoffer=result.object %}
  113. <article class="host full-width" >
  114. <a href="{% url 'host:detail' lodgingoffer.slug %}">
  115. <div class="img-title-cont">
  116. {% if lodgingoffer.photo %}
  117. <div class="img" style="background: url('{{ lodgingoffer.photo.url }}') no-repeat center; background-size:cover;"></div>
  118. {% endif %}
  119. <div class="title-cont">
  120. <h3>{{ lodgingoffer.ad_title }}</h3>
  121. </div>
  122. </div>
  123. </a>
  124. <hr/>
  125. {% endwith %}
  126. {% empty %}
  127. <p>No existen resultados para tu búsqueda de "{{ cd.query }}".</p>
  128. {% endfor %}
  129. </article>
  130. {% endif %}
Add Comment
Please, Sign In to add comment