Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class LodgingOffer(models.Model):
- created_by = models.ForeignKey(settings.AUTH_USER_MODEL,
- on_delete=models.CASCADE
- )
- slug = models.SlugField(max_length=100, blank=True)
- offered_services = models.ManyToManyField(
- OfferedServices,
- related_name="lodgingoffers"
- )
- # Other fields
- def __str__(self):
- return "%s" % self.ad_title
- def get_absolute_url(self):
- return reverse('host:detail', kwargs = {'slug' : self.slug })
- # Create slug to Url object, friendly readable
- def create_slug(instance, new_slug=None):
- slug = slugify(instance.ad_title)
- if new_slug is not None:
- slug = new_slug
- qs = LodgingOffer.objects.filter(slug=slug).order_by("-id")
- exists = qs.exists()
- if exists:
- new_slug = "%s-%s" % (slug, qs.first().id)
- return create_slug(instance, new_slug=new_slug)
- return slug
- def pre_save_lodging_offer_receiver(sender, instance, *args, **kwargs):
- if not instance.slug:
- instance.slug = create_slug(instance)
- pre_save.connect(pre_save_lodging_offer_receiver, sender=LodgingOffer)
- # I get file name to save the images
- def get_image_filename(instance, filename):
- title = instance.lodging_offer.ad_title
- slug = slugify(title)
- return "lodging_offer_images/%s-%s" % (slug, filename)
- class LodgingOfferImage(models.Model):
- lodging_offer = models.ForeignKey(LodgingOffer)
- image = models.ImageField(upload_to=get_image_filename,
- verbose_name='Imagen',)
- class LodgingOfferForm(forms.ModelForm):
- title = "Crear oferta de alojamiento"
- class Meta:
- model = LodgingOffer
- fields = ('ad_title', 'country', 'city', 'address',
- 'lodging_offer_type', 'stars', 'check_in', 'check_out',
- 'offered_services', 'featured_amenities',
- 'room_type_offered', 'number_guest_room_type', 'bed_type',
- 'bathroom', 'room_information', 'image', 'room_value',
- 'additional_description', 'is_taked')
- class LodgingOfferImagesForm(forms.ModelForm):
- image = forms.ImageField(label='Imagen')
- class Meta:
- model = LodgingOfferImage
- fields = ('image', )
- class HostingOfferCreateView(SuccessMessageMixin, LoginRequiredMixin, UserProfileDataMixin, CreateView):
- model = LodgingOffer
- form_class = LodgingOfferForm
- #success_url = reverse_lazy("articles:article_list")
- success_message = "Oferta de alojamiento creada con éxito"
- def post(self, request, *args, **kwargs):
- print('post arrive')
- ImageFormSet = modelformset_factory(LodgingOfferImage, form=LodgingOfferImagesForm, extra=3)
- lodging_offerForm = LodgingOfferForm(self.request.POST)
- formset = ImageFormSet(self.request.POST, self.request.FILES,
- queryset=LodgingOfferImage.objects.none())
- print('Request del usuario antes de validar el form', self.request.user)
- if lodging_offerForm.is_valid() and formset.is_valid():
- lodging_offer_form = lodging_offerForm.save(commit=False)
- print('Request del usuario despues de validado el form', self.request.user)
- lodging_offer_form.created_by_id = self.request.user
- lodging_offer_form.save()
- for form in formset.cleaned_data:
- image = form['image']
- photo = LodgingOfferImage(lodging_offer=lodging_offer_form, image=image)
- photo.save()
- messages.success(self.request,
- "Yeeew,check it out on the home page!")
- #return redirect('host:detail', slug=self.slug_url_kwarg)
- #return HttpResponseRedirect(lodging_offer_form.get_absolute_url())
- #return self.form_valid(form)
- return super(HostingOfferCreateView, self).post(request, *args, **kwargs)
- def get_context_data(self, **kwargs):
- context = super(HostingOfferCreateView, self).get_context_data(**kwargs)
- ImageFormSet = modelformset_factory(LodgingOfferImage,
- form=LodgingOfferImagesForm, extra=3)
- lodging_offerForm = LodgingOfferForm()
- formset = ImageFormSet(queryset=LodgingOfferImage.objects.none())
- context['lodging_offerForm'] = lodging_offerForm
- context['formset'] = formset
- return context
- {% extends 'layout.html' %}
- {% load staticfiles %}
- {% load bootstrap3 %}
- {% block body_content %}
- <form method="POST" enctype="multipart/form-data">
- {% csrf_token %}
- {% for hidden in lodging_offerForm.hidden_fields %}
- {{ hidden }}
- {% endfor %}
- {% for field in lodging_offerForm %}
- {{ field }} <br />
- {% endfor %}
- {{ formset.management_form }}
- {% for form in formset %}
- {{ form }}
- {% endfor %}
- <input type="submit" name="submit" value="Submit" />
- </form>
- {% endblock %}
- System check identified no issues (0 silenced).
- October 21, 2017 - 11:55:03
- Django version 1.10.7, using settings 'hostayni.settings.development'
- Starting development server at http://127.0.0.1:8000/
- Quit the server with CONTROL-C.
- [21/Oct/2017 12:02:00] "GET / HTTP/1.1" 200 165408
- Request del usuario en get_context_data @botibagl@gmail.com
- [21/Oct/2017 12:02:02] "GET /host/lodging-offer/new/ HTTP/1.1" 200 23774
- post arrive
- Request del usuario antes de validar el form @botibagl@gmail.com
- Internal Server Error: /host/lodging-offer/new/
- Traceback (most recent call last):
- File "/home/bgarcial/.virtualenvs/hostayni/lib/python3.6/site-packages/django/db/backends/utils.py", line 64, in execute
- return self.cursor.execute(sql, params)
- psycopg2.IntegrityError: null value in column "created_by_id" violates not-null constraint
- 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