Advertisement
Guest User

Untitled

a guest
Oct 21st, 2017
373
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.91 KB | None | 0 0
  1. class LodgingOffer(models.Model):
  2.  
  3. created_by = models.ForeignKey(settings.AUTH_USER_MODEL,
  4. on_delete=models.CASCADE
  5. )
  6.  
  7. slug = models.SlugField(max_length=100, blank=True)
  8.  
  9. offered_services = models.ManyToManyField(
  10. OfferedServices,
  11. related_name="lodgingoffers"
  12. )
  13.  
  14. # Other fields
  15.  
  16. def __str__(self):
  17. return "%s" % self.ad_title
  18.  
  19. def get_absolute_url(self):
  20. return reverse('host:detail', kwargs = {'slug' : self.slug })
  21.  
  22. # Create slug to Url object, friendly readable
  23. def create_slug(instance, new_slug=None):
  24. slug = slugify(instance.ad_title)
  25. if new_slug is not None:
  26. slug = new_slug
  27. qs = LodgingOffer.objects.filter(slug=slug).order_by("-id")
  28. exists = qs.exists()
  29. if exists:
  30. new_slug = "%s-%s" % (slug, qs.first().id)
  31. return create_slug(instance, new_slug=new_slug)
  32. return slug
  33.  
  34.  
  35. def pre_save_lodging_offer_receiver(sender, instance, *args, **kwargs):
  36. if not instance.slug:
  37. instance.slug = create_slug(instance)
  38.  
  39.  
  40. pre_save.connect(pre_save_lodging_offer_receiver, sender=LodgingOffer)
  41.  
  42. # I get file name to save the images
  43. def get_image_filename(instance, filename):
  44. title = instance.lodging_offer.ad_title
  45. slug = slugify(title)
  46. return "lodging_offer_images/%s-%s" % (slug, filename)
  47.  
  48. class LodgingOfferImage(models.Model):
  49. lodging_offer = models.ForeignKey(LodgingOffer)
  50. image = models.ImageField(upload_to=get_image_filename,
  51. verbose_name='Imagen',)
  52.  
  53. class LodgingOfferForm(forms.ModelForm):
  54. title = "Crear oferta de alojamiento"
  55.  
  56. class Meta:
  57. model = LodgingOffer
  58. fields = ('ad_title', 'country', 'city', 'address',
  59. 'lodging_offer_type', 'stars', 'check_in', 'check_out',
  60. 'offered_services', 'featured_amenities',
  61. 'room_type_offered', 'number_guest_room_type', 'bed_type',
  62. 'bathroom', 'room_information', 'image', 'room_value',
  63. 'additional_description', 'is_taked')
  64.  
  65.  
  66. class LodgingOfferImagesForm(forms.ModelForm):
  67. image = forms.ImageField(label='Imagen')
  68.  
  69. class Meta:
  70. model = LodgingOfferImage
  71. fields = ('image', )
  72.  
  73. class HostingOfferCreateView(SuccessMessageMixin, LoginRequiredMixin, UserProfileDataMixin, CreateView):
  74. model = LodgingOffer
  75. form_class = LodgingOfferForm
  76. #success_url = reverse_lazy("articles:article_list")
  77. success_message = "Oferta de alojamiento creada con éxito"
  78.  
  79. def post(self, request, *args, **kwargs):
  80. print('post arrive')
  81. ImageFormSet = modelformset_factory(LodgingOfferImage, form=LodgingOfferImagesForm, extra=3)
  82. lodging_offerForm = LodgingOfferForm(self.request.POST)
  83. formset = ImageFormSet(self.request.POST, self.request.FILES,
  84. queryset=LodgingOfferImage.objects.none())
  85.  
  86. print('Request del usuario antes de validar el form', self.request.user)
  87.  
  88. if lodging_offerForm.is_valid() and formset.is_valid():
  89. lodging_offer_form = lodging_offerForm.save(commit=False)
  90. print('Request del usuario despues de validado el form', self.request.user)
  91. lodging_offer_form.created_by_id = self.request.user
  92. lodging_offer_form.save()
  93.  
  94. for form in formset.cleaned_data:
  95. image = form['image']
  96. photo = LodgingOfferImage(lodging_offer=lodging_offer_form, image=image)
  97. photo.save()
  98. messages.success(self.request,
  99. "Yeeew,check it out on the home page!")
  100. #return redirect('host:detail', slug=self.slug_url_kwarg)
  101. #return HttpResponseRedirect(lodging_offer_form.get_absolute_url())
  102. #return self.form_valid(form)
  103. return super(HostingOfferCreateView, self).post(request, *args, **kwargs)
  104.  
  105. def get_context_data(self, **kwargs):
  106. context = super(HostingOfferCreateView, self).get_context_data(**kwargs)
  107. ImageFormSet = modelformset_factory(LodgingOfferImage,
  108. form=LodgingOfferImagesForm, extra=3)
  109.  
  110. lodging_offerForm = LodgingOfferForm()
  111. formset = ImageFormSet(queryset=LodgingOfferImage.objects.none())
  112. context['lodging_offerForm'] = lodging_offerForm
  113. context['formset'] = formset
  114. return context
  115.  
  116. {% extends 'layout.html' %}
  117. {% load staticfiles %}
  118. {% load bootstrap3 %}
  119. {% block body_content %}
  120.  
  121. <form method="POST" enctype="multipart/form-data">
  122.  
  123. {% csrf_token %}
  124. {% for hidden in lodging_offerForm.hidden_fields %}
  125. {{ hidden }}
  126. {% endfor %}
  127.  
  128. {% for field in lodging_offerForm %}
  129. {{ field }} <br />
  130. {% endfor %}
  131.  
  132. {{ formset.management_form }}
  133. {% for form in formset %}
  134. {{ form }}
  135. {% endfor %}
  136.  
  137.  
  138. <input type="submit" name="submit" value="Submit" />
  139. </form>
  140.  
  141.  
  142. {% endblock %}
  143.  
  144. System check identified no issues (0 silenced).
  145. October 21, 2017 - 11:55:03
  146. Django version 1.10.7, using settings 'hostayni.settings.development'
  147. Starting development server at http://127.0.0.1:8000/
  148. Quit the server with CONTROL-C.
  149. [21/Oct/2017 12:02:00] "GET / HTTP/1.1" 200 165408
  150. Request del usuario en get_context_data @botibagl@gmail.com
  151. [21/Oct/2017 12:02:02] "GET /host/lodging-offer/new/ HTTP/1.1" 200 23774
  152. post arrive
  153. Request del usuario antes de validar el form @botibagl@gmail.com
  154. Internal Server Error: /host/lodging-offer/new/
  155. Traceback (most recent call last):
  156. File "/home/bgarcial/.virtualenvs/hostayni/lib/python3.6/site-packages/django/db/backends/utils.py", line 64, in execute
  157. return self.cursor.execute(sql, params)
  158. psycopg2.IntegrityError: null value in column "created_by_id" violates not-null constraint
  159. DETAIL: Failing row contains (79, Oferta de alojamiento, CO, Envigado, Calle 40D Sur #3221, null, null, Hotel, 1 estrella, 2017-10-28, 2017-10-28, Toda la propiedad, Para 1 huésped, Cama individual, Baño privado, 12345, dsdsd, 2017-10-21 12:02:43.817295+00, null, oferta-de-alojamiento, f, hosting-host-photos/15061122523583.jpg).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement