簡體   English   中英

使用多對多字段查詢 Django 自定義用戶模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM