Hello,
With these models of Post and Images, I want to display and edit/delete the
images along with the fields of the post. I have just added the Images
model so I can have its fields in a Formset but the implementation of Model
Formsets has challenged me.

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    price = models.IntegerField(validators=[MinValueValidator(10
), MaxValueValidator(10000000)], default=10,
                                help_text="Enter in Dollars, $.")
    featured       = models.BooleanField(default=False)
    active         = models.BooleanField(default=True)
    propertyType   = models.CharField(max_length=120, choices=TYPE_CHOICES,
validators=[
                                    validate_propertyType], default='Villa'
,)
    area           = models.DecimalField(decimal_places=2, max_digits=20,
null=True, blank=True,
                               help_text=
"Enter in Acres. Hint: 100 decimals = 1 acre = 0.405 hectares, 1 Sq.
mile = 640 Acres, 1 decimal = 436 sq. feet = 40.5 sq. metres = 0.001
acres."
)
    bedrooms       = models.SmallIntegerField(choices=BEDROOMS_CHOICES,
null=True, blank=True)
    baths          = models.SmallIntegerField(choices=BATHROOMS_CHOICES,
null=True, blank=True)
    garages        = models.SmallIntegerField(choices=GARAGES_CHOICES, null=
True, blank=True)
    location       = models.CharField(
        max_length=120, null=True, help_text=
"Enter a Town/City where your Property is located.")
    propertyStatus = models.CharField(
        max_length=120, choices=STATUS_CHOICES, validators=
[validate_propertyStatus], default='Sale')
    amenities      = models.TextField(null=True, blank=True,
                                 help_text=
"Enter separating with commas, e.g: Parking, Balcony, Swimming Pool,
Tennis Courts, Outdoor Kitchen, Internet, Cable T.V, Concrete
Flooring, ..."
)
    slug           = models.SlugField(null=True, blank=True)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk})

def get_image_filename(instance, filename):
    title = instance.post.title
    slug = slugify(title)
    return "properties_pics/%s-%s" % (slug, filename)

class Images(models.Model):
    post            = models.ForeignKey(Post, on_delete=models.CASCADE,
default=None)
    propertyImages  = models.ImageField(
        default="default.jpg", upload_to=get_image_filename,
        help_text=
" We must provide a clear Picture, preferably Landscape, not Portrait!")

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        img = Image.open(self.propertyImages.path)

        if img.height > 800 or img.width > 600:
            output_size = (600, 800)
            img.thumbnail(output_size)
            img.save(self.propertyImages.path)

Here is my Views.py, works well before the Formsets;

class PostListView(ListView):
    model = Post
    template_name = "maproperty/home.html"  # <app>/<model>_<viewtype>.html
    context_object_name = "posts"
    odering = ["date_posted"]
    paginate_by = 5

class UserPostListView(ListView):
    model = Post
    template_name = "maproperty/user_posts.html"
# <app>/<model>_<viewtype>.html
    context_object_name = "posts"
    paginate_by = 6


#filter a post from a certain user, modify the querry set by
overidding this method
    def get_queryset(self):
        #get user associated with the username we gonna get from the url.
        user =get_object_or_404(User, username=self.kwargs.get('username'))
        return Post.objects.filter(author=user).order_by('-date_posted')


class SaleListView(ListView):
    model = Post

class RentListView(ListView):
    model = Post

class BookingListView(ListView):
    model = Post


class PostDetailView(DetailView):
    model = Post

class PostCreateView(LoginRequiredMixin, CreateView):
    model = Post
    fields = ['title','content', 'price', 'propertyImage', 'propertyType',
'area', 'bedrooms', 'baths', 'garages',
    'location', 'propertyStatus', 'amenities']

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Post
    fields = ['title','content', 'price', 'propertyImage', 'propertyType',
'area', 'bedrooms', 'baths', 'garages',
    'location', 'propertyStatus', 'amenities']

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

    def test_func(self):
        post = self.get_object()
        if self.request.user == post.author:
            return True
        return False

class PostDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = Post
    success_url = '/'

    def test_func(self):
        post = self.get_object()
        if self.request.user == post.author:
            return True
        return False


def about(request):
    return render(request, "maproperty/about.html", {"title": "About"})

def contact(request):
    return render(request, "maproperty/contact_page.html", {"title":
"Contact"})

Thank you.


*Richard Dick Balwane*

*Mobiles:        +256 755 442248, *

*                        +256 781 493558.*
*Twiter:           @RBalwane*
*WhatsApp:   **+256 755 442248*


*Balwane Holding Inc.*



<http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
Virus-free.
www.avg.com
<http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAAjYwK80PJ%3DajVBomp3VfHs5kRpYA5Hcvu8cteP6MxXk161c0Q%40mail.gmail.com.

Reply via email to