Facing issue with mongo_aggregate(). Below is the stacktrace.
Traceback (most recent call last): File "/Users/Pritam/Documents/DjangoWorkspace/tracking-admin/backend/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request) File "/Users/Pritam/Documents/DjangoWorkspace/tracking-admin/backend/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request) File "/Users/Pritam/Documents/DjangoWorkspace/tracking-admin/backend/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/Users/Pritam/Documents/DjangoWorkspace/tracking-admin/backend/venv/lib/python3.8/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs) File "/Users/Pritam/Documents/DjangoWorkspace/tracking-admin/backend/venv/lib/python3.8/site-packages/rest_framework/viewsets.py", line 125, in view
return self.dispatch(request, *args, **kwargs) File "/Users/Pritam/Documents/DjangoWorkspace/tracking-admin/backend/venv/lib/python3.8/site-packages/rest_framework/views.py", line 509, in dispatch
response = self.handle_exception(exc) File "/Users/Pritam/Documents/DjangoWorkspace/tracking-admin/backend/venv/lib/python3.8/site-packages/rest_framework/views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc) File "/Users/Pritam/Documents/DjangoWorkspace/tracking-admin/backend/venv/lib/python3.8/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
raise exc File "/Users/Pritam/Documents/DjangoWorkspace/tracking-admin/backend/venv/lib/python3.8/site-packages/rest_framework/views.py", line 506, in dispatch
response = handler(request, *args, **kwargs) File "/Users/Pritam/Documents/DjangoWorkspace/tracking-admin/backend/apps/websites/views.py", line 192, in collective_click_data
result = Click.objects.mongo_aggregate(pipeline) File "/Users/Pritam/Documents/DjangoWorkspace/tracking-admin/backend/venv/lib/python3.8/site-packages/djongo/models/fields.py", line 69, in __getattr__
return getattr(self._client, name) File "/Users/Pritam/Documents/DjangoWorkspace/tracking-admin/backend/venv/lib/python3.8/site-packages/djongo/models/fields.py", line 71, in __getattr__
return super().__getattr__(name) AttributeError: 'super' object has no attribute '__getattr__'
models.py
from djongo import models
class VisitorOnline(models.IntegerChoices):
NO = 0, "No"
YES = 1, "Yes"
class Location(models.Model):
ip = models.CharField()
version = models.CharField(null=True, blank=True)
city = models.CharField(null=True, blank=True)
region = models.CharField(null=True, blank=True)
region_code = models.CharField(null=True, blank=True)
country = models.CharField(null=True, blank=True)
country_name = models.CharField(null=True, blank=True)
country_code = models.CharField(null=True, blank=True)
country_code_iso3 = models.CharField(null=True, blank=True)
country_capital = models.CharField(null=True, blank=True)
country_tld = models.CharField(null=True, blank=True)
continent_code = models.CharField(null=True, blank=True)
in_eu = models.BooleanField(null=True, blank=True)
postal = models.CharField(null=True, blank=True)
latitude = models.FloatField(null=True, blank=True)
longitude = models.FloatField(null=True, blank=True)
timezone = models.CharField(null=True, blank=True)
utc_offset = models.CharField(null=True, blank=True)
country_calling_code = models.CharField(null=True, blank=True)
currency = models.CharField(null=True, blank=True)
currency_name = models.CharField(null=True, blank=True)
languages = models.CharField(null=True, blank=True)
country_area = models.IntegerField(null=True, blank=True)
country_population = models.IntegerField(null=True, blank=True)
asn = models.CharField(null=True, blank=True)
org = models.CharField(null=True, blank=True)
class Meta:
abstract = True
class DeviceInfo(models.Model):
device_type = models.CharField()
device = models.CharField()
platform = models.CharField()
browser = models.CharField()
useragent = models.CharField()
isRobot = models.BooleanField(default=False)
class Meta:
abstract = True
# Create your models here.
class Visitor(models.Model):
_id = models.ObjectIdField()
website_id = models.IntegerField()
uid = models.CharField(max_length=40, unique=True)
ip = models.CharField(max_length=20)
deviceInfo = models.EmbeddedField(model_container=DeviceInfo)
location = models.EmbeddedField(model_container=Location)
is_online = models.IntegerField(
default=VisitorOnline.YES, choices=VisitorOnline.choices
)
currentPage = models.CharField(max_length=255, null=True, blank=True)
currentSection = models.CharField(max_length=255, null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True)
updated_at = models.DateTimeField(auto_now=True, null=True, blank=True)
objects = models.DjongoManager()
class Meta:
db_table = "visitors"
class Visit(models.Model):
_id = models.ObjectIdField()
page = models.CharField(max_length=255)
section = models.CharField(max_length=255)
time = models.IntegerField()
visitors = models.ForeignKey(Visitor, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True)
updated_at = models.DateTimeField(auto_now=True, null=True, blank=True)
objects = models.DjongoManager().using("mongodb")
class Meta:
db_table = "visits"
class Click(models.Model):
_id = models.ObjectIdField()
page = models.CharField(max_length=255)
section = models.CharField(max_length=255)
click = models.CharField(max_length=255)
count = models.IntegerField()
visitors = models.ForeignKey(Visitor, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True)
updated_at = models.DateTimeField(auto_now=True, null=True, blank=True)
objects = models.DjongoManager()
class Meta:
db_table = "clicks"
class Campaign(models.Model):
_id = models.ObjectIdField()
url = models.CharField(max_length=255)
source = models.CharField(max_length=255)
medium = models.CharField(max_length=255)
campaign = models.CharField(max_length=255)
visitors = models.ForeignKey(Visitor, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True)
updated_at = models.DateTimeField(auto_now=True, null=True, blank=True)
objects = models.DjongoManager()
class Meta:
db_table = "campaigns"
views.py
def collective_click_data(self, request, slug):
try:
website = Website.objects.get(slug=slug)
except Website.DoesNotExist:
return AppResponse.error(
"Website not found.", None, http_error_code=status.HTTP_404_NOT_FOUND
)
pipeline = [
{
"$group": {
"_id": {
"page": "$page",
"section": "$section",
"click": "$click",
},
"totalClicks": {"$sum": "$count"},
}
},
{
"$group": {
"_id": "$_id.page",
"sections": {
"$push": {
"section": "$_id.section",
"click": "$_id.click",
"totalClicks": "$totalClicks",
},
},
}
},
{"$project": {"page": "$_id", "_id": 0, "data": "$sections"}},
{
"$sort": {
"page": 1,
}
},
]
result = Click.objects.mongo_aggregate(pipeline)
print(result)
return AppResponse.success("Daily visitor count found.")
requirements:
Django==3.0.5
djangorestframework==3.12.2
djongo==1.3.3
pymongo==3.11.2
Maybe you can share some more code and help out with providing what you already have.
A few things which can already be checked:
pip install -r requirements.txt [OR]
pip install Django==3.0.5 djangorestframework==3.12.2 djongo==1.3.3 pymongo==3.11.2
from djongo import DjongoManager
This may not include all necesarry imports. Check the documentation or post the code that you already have.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With