Как получить объект последней модели зарегистрированного пользователя, который уже отправил форму?

#django #django-views #django-queryset

#django #django-просмотры #django-набор запросов

Вопрос:

Я пробовал что-то вроде этого

 customer=Customer.objects.filter(id=request.user.id).latest('first_name', 'last_name')
customer.first_name
  

Однако это извлекает мне старые данные зарегистрированного пользователя из поля first_name, отправленного через форму (в более ранней отправке). (Предполагая, что зарегистрированный пользователь отправил 3 отправки, он извлекает мне данные 1-й отправки, а не самой последней.)

Я прочитал о методе latest() и реализовал это

 customer=Customer.objects.latest('id')
  

но, как мы знаем, это отобразит только последние сведения о отправке, не обязательно пользователя, который вошел в систему.

Вот мой model.py для справки

 class Customer(models.Model):

    id=models.AutoField(primary_key=True, default=None)
    customerReg=models.OneToOneField(User, on_delete=models.SET_NULL, null=True, blank=True)
    first_name=models.CharField(max_length=200, blank=False, default=None)
    last_name=models.CharField(max_length=200, blank=False, default=None)
  

Итак, как мне запросить эту информацию?

Ответ №1:

Поскольку связь между User и Customer есть OneToOne , вы можете просто использовать:

 try:
    customer = user.customer
except:
    customer = None
  

Если бы это было ForeignKey отношение, то вы могли бы использовать:

 customer = request.user.customer_set.last()
  

Комментарии:

1. Подумав, я думаю, что внешний ключ был бы лучше для моей базы данных. Итак, спасибо, что сделали дополнительный шаг.

Ответ №2:

Используйте descend упорядочение, чтобы получить latest объект модели пользователем :

 customer = Customer.objects.filter(id=request.user.id).order_by('-id')