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

    stas_workout
    @stas_workout Автор вопроса
    sim3x,
    class Listing(models.Model):
    	realtor = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Риэлтор', related_name='realtor')
    	realtor_photo = models.ImageField(blank=True, upload_to='photos/%Y/%m/%d/', verbose_name='Фото риэлтора')
    	phone = models.CharField(max_length=20, verbose_name='Телефон')
    	region = models.CharField(default="Чуйская", max_length=100, verbose_name='Область')
    	city = models.CharField(default="Бишкек", max_length=100, verbose_name='Город')
    	district = models.CharField(max_length=100, verbose_name='Район')
    	title = models.CharField(blank=True, max_length=200, verbose_name='Заголовок')
    	address = models.CharField(max_length=200, verbose_name='Адрес')
    	description = models.TextField(blank=True, verbose_name='Описание')	
    	stage = models.IntegerField(verbose_name='Этаж')
    	rooms = models.IntegerField(verbose_name='Количество комнат')	
    	garage = models.IntegerField(default=0, verbose_name='Гараж')
    	sqmt = models.IntegerField(verbose_name='Площадь')
    	price = models.IntegerField(verbose_name='Цена')
    	photo_main = models.ImageField(blank=True, upload_to='photos/%Y/%m/%d/', verbose_name='Основное фото')
    	photo_1 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True, verbose_name='Фото 1')
    	photo_2 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True, verbose_name='Фото 2')
    	photo_3 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True, verbose_name='Фото 3')
    	photo_4 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True, verbose_name='Фото 4')
    	photo_5 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True, verbose_name='Фото 5')
    	photo_6 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True, verbose_name='Фото 6')
    	is_published = models.BooleanField(default=True, verbose_name='Публично')
    	list_date = models.DateTimeField(default=datetime.now, blank=True, verbose_name='Дата публикации')
    
    	def __str__(self):
    		return self.realtor
    
    	class Meta:
    		verbose_name = 'Объявление'
    		verbose_name_plural = 'Объявления'
  • Django. Как сделать, чтобы пользователь не мог редактировать чужие публикации?

    stas_workout
    @stas_workout Автор вопроса
    Pavel Denisov, ну, я понимаю, что надо какое-то условие писать или проверку, просто пока не догоняю, как это сделать.
  • Django. Как привязать пользователя к модели и реализовать добавление, редактирование и удаление данных через формы?

    stas_workout
    @stas_workout Автор вопроса
    alternativshik, сделал как первый раз, почти все поля сделал необязательными и всё заработало)) спасибо большое
  • Django. Как привязать пользователя к модели и реализовать добавление, редактирование и удаление данных через формы?

    stas_workout
    @stas_workout Автор вопроса
    Я сделал так, наверное, сильно нагромоздил, объявление всё равно не сохраняется:
    from django import forms
    from .models import Listing
    
    class ListingForm(forms.ModelForm):
    
        class Meta:
            model = Listing
            exclude = ('realtor',)

    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()
                return redirect(listing_add)
    
        return render(request, 'listings/listing_add.html', {
            'form': form
        })


    from django.db import models
    from datetime import datetime
    from realtors.models import Realtor
    
    class Listing(models.Model):
    	realtor = models.ForeignKey(Realtor, on_delete=models.CASCADE, verbose_name='Риэлтор')
    	region = models.CharField(default="Чуйская", max_length=100, verbose_name='Область')
    	city = models.CharField(default="Бишкек", max_length=100, verbose_name='Город')
    	district = models.CharField(max_length=100, verbose_name='Район')
    	title = models.CharField(max_length=200, verbose_name='Заголовок')
    	address = models.CharField(max_length=200, verbose_name='Адрес')
    	description = models.TextField(blank=True, verbose_name='Описание')	
    	stage = models.IntegerField(verbose_name='Этаж')
    	rooms = models.IntegerField(verbose_name='Количество комнат')	
    	garage = models.IntegerField(default=0, verbose_name='Гараж')
    	sqmt = models.IntegerField(verbose_name='Площадь')
    	price = models.IntegerField(verbose_name='Цена')
    	photo_main = models.ImageField(upload_to='photos/%Y/%m/%d/', verbose_name='Основное фото')
    	photo_1 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True, verbose_name='Фото 1')
    	photo_2 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True, verbose_name='Фото 2')
    	photo_3 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True, verbose_name='Фото 3')
    	photo_4 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True, verbose_name='Фото 4')
    	photo_5 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True, verbose_name='Фото 5')
    	photo_6 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True, verbose_name='Фото 6')
    	is_published = models.BooleanField(default=True, verbose_name='Публично')
    	list_date = models.DateTimeField(default=datetime.now, blank=True, verbose_name='Дата публикации')
    
    	def __str__(self):
    		return self.realtor
    
    	class Meta:
    		verbose_name = 'Объявление'
    		verbose_name_plural = 'Объявления'

    from django.db import models
    from datetime import datetime
    from django.contrib.auth.models import User
    
    class Realtor(models.Model):
    	user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='realtor', verbose_name='Риэлтор')
    	name = models.CharField(max_length=100, verbose_name='Имя')
    	photo = models.ImageField(upload_to='photos/%Y/%m/%d/', verbose_name='Фото')
    	description = models.TextField(blank=True, verbose_name='Описание')
    	phone = models.CharField(max_length=20, verbose_name='Телефон')
    	email = models.CharField(max_length=50, verbose_name='Email')
    	is_mvp = models.BooleanField(default=False, verbose_name='Реэлтор месяца')
    	hire_date = models.DateTimeField(default=datetime.now, blank=True, verbose_name='Дата приёма на работу')
    
    	def __str__(self):
    		return self.name
    
    	class Meta:
    		verbose_name = 'Риэлтор'
    		verbose_name_plural = 'Риэлторы'