Django. Как сделать, чтобы пользователь не мог редактировать чужие публикации?

Всем привет. На данный момент я могу удалять и редактировать свои и чужие объявления, а как сделать, чтобы чужие я не смог изменять? Также, незарегистрированный пользователь тоже может удалять и изменять объявления, если перейдёт по адресу, хотя кнопки редактирования я скрыл, если пользователь не в системе.
Вот представление:
def listing_delete(request, listing_id):
    listing = Listing.objects.get(id=listing_id)
    listing.delete()
    messages.success(request, 'Объявление удалено!')

    return redirect('dashboard')

def listing_edit(request, listing_id):
    form = ListingForm(instance = Listing.objects.get(id = listing_id))    
    if request.method == "POST":
        form = ListingForm(request.POST, request.FILES, instance = Listing.objects.get(id = listing_id))    
        if form.is_valid():        	
            listing = form.save()
            messages.success(request, 'Объявление изменено!')

            return redirect('listing', listing_id)

    return render(request, 'listings/listing_edit.html', {
        'form': form
    })

def listing_add(request):
    form = ListingForm()
    if request.method == "POST":
        form = ListingForm(request.POST, request.FILES)
        if form.is_valid():
            listing = form.save(commit=False)
            listing.realtor = request.user
            listing.save()
            messages.success(request, 'Объявление добавлено!')
            return redirect('dashboard')

    return render(request, 'listings/listing_add.html', {
        'form': form
    })

Вот кнопки, может, тут надо условие переделать:
{% if user.is_authenticated %}
     <a href="{% url 'listing_edit' listing.id %}" class="btn btn-secondary mb-4">
     <h5><i class="fas fa-edit"> Редактировать</i></h5></a>
     <a href="{% url 'listing_delete' listing.id %}" class="btn btn-danger mb-4">
     <h5><i class="fa fa-trash-alt"> Удалить</i></h5></a>
{% endif %}

Пробовал различными условиями, но всё равно не работает. У кого будет время, подскажите, пожалуйста. И, вообще, помимо моего вопроса, в представлениях, как наиболее корректно всё это делается? Может, надо ещё какие-то исключения писать, чтобы всё работало более правильно и безотказно, чтобы было более безопасно.
Заранее, спасибо.
  • Вопрос задан
  • 231 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы