Я пытаюсь получить доступ к объекту, используемому в Django DetailView и используемому для отображения данных модели.
Я могу получить доступ к объекту в html-шаблоне с помощью {{ object.product_name }}
.
Но как мне получить доступ к объекту в функции, как показано ниже? (внутри views.py) .
def access_object_values(self):
name = object.product_name
(мои попытки заканчиваются неудачей, и я получаю: объект WSGIRequest 'не имеет атрибута)
..
Мои настройки:
*models.py*
class Product(models.Model):
product_name = models.Charfield(max_length=20)
product_price = models.FloatField(max_length=12, default=100)
*urls.py*
path('product/<int:pk>/', ProductView.as_view(), name='product-detail)
Мои попытки:
class ProductView(DetailView):
model = Product
template_name = 'product/product_detail.html'
def get_object(self, queryset=None):
if queryset is None:
queryset = self.get_queryset()
obj = super(ProductView, self).get_object(queryset=queryset)
return obj
def get(self, obj, *args, **kwargs):
return self.generate_pdf(obj)
# TO VISUALLY GET FEEDBACK OF SUCCESS OR NOT
# ==========================================
def generate_pdf(self, obj):
from reportlab.pdfgen import canvas
response = HttpResponse(content_type='application/pdf')
response['pdf'] = 'attachment; filename="summary.pdf"'
p = canvas.Canvas(response)
# name = getattr(obj, 'product_name') # produces 'WSGIRequest' object has no attribute 'product_name'
# name = obj.product_name # produces 'WSGIRequest' object has no attribute 'product_name'
# name = type(obj) # produces 'WSGIRequest' has no attribute 'decode
name = "text" # this works, and it prints
p.drawString(100, 100, name)
p.showPage()
p.save()
print(p)
return response