Запрос к пользовательской модели пользователя Django с полем "многие-ко-многим
Я очень новичок в Django.
У меня есть пользовательская модель пользователя:
accounts\models.py:
from django.contrib.auth.models import AbstractUser
from django.db import models
from tradestats.models import Webhook
class CustomUser(AbstractUser):
webhook = models.ManyToManyField(Webhook, blank=True)
У меня есть приложение tradestats с моделью Webhook:
tradestats\models.py
from django.db import models
class Webhook(models.Model):
id = models.UUIDField(
primary_key=True,
default=uuid.uuid4,
editable=False,
)
name = models.CharField(verbose_name='Webhooks name', max_length=50, null=False, blank=False)
url = models.URLField(max_length=255, null=False, blank=False, unique=True)
def __str__(self):
return self.name
class Meta:
ordering = ['name']
У меня есть представление, основанное на классе. В этом представлении я хочу запросить у вошедшего пользователя все поле Webhooks url и передать в render() в качестве контекста.
tradestats\view.py:
context = {
'form': form.cleaned_data,
'variable': value1,
'variable2': value2,
}
return render(request, template_name='renko/renko_calculate.html', context=context)
Как я могу запросить webhook.urls и передать в контекст? Большое спасибо.
Попробуйте следующее:
user = CustomUser.objects.get(id=request.user.id)
context = {
...
'webhooks': user.webhook
}
...
Я пробовал, но:
у объекта 'CustomUser' нет атрибута 'webhook'
.
Я установил debug_toolbar и изучил SQL querry.
SELECT "accounts_customuser"."id",
"accounts_customuser"."password",
"accounts_customuser"."last_login",
"accounts_customuser"."is_superuser",
"accounts_customuser"."username",
"accounts_customuser"."first_name",
"accounts_customuser"."last_name",
"accounts_customuser"."email",
"accounts_customuser"."is_staff",
"accounts_customuser"."is_active",
"accounts_customuser"."date_joined"
FROM "accounts_customuser"
WHERE "accounts_customuser"."id" = 1
LIMIT 21
Я не видел поиска полей в вебхуке.
Я попробовал с помощью shell:
python manage.py shell
Python 3.10.5 (main, Jun 7 2022, 19:23:05) [GCC 11.2.1 20220219] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from accounts.models import CustomUser
>>> from tradestats.models import Webhook
>>> CustomUser.objects.get(id=1).username
'admin'
CustomUser.objects.get(id=1).webhook
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'CustomUser' object has no attribute 'webhook'
Update:
.
Это была моя ошибка. webhook не существует, но webhooks.
.
Это работает:
user = CustomUser.objects.get(id=request.user.id)
context = {
'webhooks': user.webhooks.all(),
}
return render(request, template_name='tradestats/webhook.html', context=context)
Я добавляю .all() в конце вашего кода для итерации в шаблоне.