JawsIk
@JawsIk
Python Django, Lua, ЧПУ-станки(ArtCam, Aspire)

Как в Django 2 в модели получить текущего юзера?

Существует допустим две модели Product и Log

Product с обычными полями: категория, название, цена и прочее.

Log такая:
LOG_EVENT_CHOICES = (
    ('added_qty', 'Добавлено количество'),
    ('changed_qty', 'Изменено количество'),
    ('changed_price', 'Изменена цена'),
)

class Log(models.Model):
    product = models.ForeignKey(Product, on_delete=models.PROTECT, verbose_name="Изделие")
    event = models.CharField(max_length=30, choices=LOG_EVENT_CHOICES, default='added_qty', verbose_name="Событие")
    description = models.CharField(max_length=100, blank=True)
    created = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name="Дата создания")
    staff = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name="Инициатор")
    qty = models.IntegerField(default=0, verbose_name="Количество")


И вот кто-то на продукте меняет цену. Чтобы поймать этот момент, я в модели Product переопределяю метод save():

def save(self, *args, **kwargs):
        
        if self.id: # сразу будет отсекать новые записи у которых ещё нет id
            # запись события смены цены
            orig_price = float(Product.objects.get(id=self.id).price)
            if orig_price != float(self.price):
                log = Log()
                log.product = self
                log.event = 'changed_price'
                log.description = 'old: ' + str(orig_price) + ' , new: ' + str(self.price)
                log.qty = self.qty
                log.staff = КАК СЮДА ПОЛУЧИТЬ ТЕКУЩЕГО ЮЗЕРА???
                log.save()


Как записать текущего юзера в переменную log.staff?
  • Вопрос задан
  • 419 просмотров
Пригласить эксперта
Ответы на вопрос 1
@MAGistr_MTM
Учусь программировать
Логику логирования изменения цены перенести во вьюху с модели
def product_edit_view(request, id):
    product = Product.objects.get(id=id)
    form = ProductForm(request.POST or None, request.FILES or None, instance=product)
    if form.is_valid():
        if product.price != form.cleaned_data['price']:
                log = Log()
                log.product = product
                log.event = 'changed_price'
                log.description = 'old: ' + str(product.price) + ' , new: ' + str(form.cleaned_data['price'])
                log.qty = product.qty
                log.staff = request.user
                log.save()
        form.save()
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы