#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')