[英]Query Django custom user model with many-to-many field
我是 Django 的新手。 我有一個自定義用戶模型:
帳戶\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)
我有一個帶有 Webhook 模型的 tradestats 應用程序:
貿易統計\模型.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()。
貿易統計\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
}
...
要不就,
context = {
...
'webhooks': request.user.webhook.all()
}
...
這一切都在文檔中
另一種方法是將用戶數據傳遞給模板並從那里訪問它。
user = CustomUser.objects.get(id=request.user.id)
context = {
...
'user': user # needs to filter the content
}
# can use the request.user approach too
return render(request, template_name='renko/renko_calculate.html', context=context)
在模板中,
{% for wh in user.webhook.all %}
{{ wh.id }}
{{ wh.name }}
{{ wh.url }}
{% endfor %}
注意:我沒有檢查這個但需要工作
我試過了,但得到這個錯誤:
'CustomUser' 對象沒有屬性 'webhook'
我安裝了 debug_toolbar 並檢查了 SQL 查詢。
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
我沒有看到 webhook 字段查找。
我嘗試使用外殼:
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'
更新
是我的錯。 webhook 不存在,但 webhook s 。
這有效:
user = CustomUser.objects.get(id=request.user.id)
context = {
'webhooks': user.webhooks.all(),
}
return render(request, template_name='tradestats/webhook.html', context=context)
我在代碼末尾添加.all()
以在模板中進行迭代。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.