You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django查询问题:如何获取当前用户名下的IP及资产名称

解决方案:获取当前用户关联的资产IP与名称

首先确认你的Asset模型结构应该类似这样(如果有差异请对应调整):

from django.db import models
from django.contrib.auth.models import User

class Asset(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='assets')
    asset_name = models.CharField(max_length=100)
    ip_address = models.GenericIPAddressField()
    # 其他自定义字段

核心问题与修正

你遇到的错误是因为把字符串(比如用户名)直接和User对象进行比较,而Asset的user字段是ForeignKey,存储的是User实例的关联关系,过滤时必须传入User对象或对应的ID数值。

1. 在视图中获取当前用户的资产

函数视图写法

from django.contrib.auth.decorators import login_required
from .models import Asset

@login_required
def user_profile(request):
    # 直接用request.user(User对象)过滤,而非字符串
    user_assets = Asset.objects.filter(user=request.user).only('asset_name', 'ip_address')
    return render(request, 'accounts/profile.html', {'user_assets': user_assets})

类视图写法

from django.views.generic import TemplateView
from django.contrib.mixins import LoginRequiredMixin
from .models import Asset

class ProfileView(LoginRequiredMixin, TemplateView):
    template_name = 'accounts/profile.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 同样使用self.request.user作为过滤条件
        context['user_assets'] = Asset.objects.filter(user=self.request.user).only('asset_name', 'ip_address')
        return context

2. 在模板中展示资产详情

在个人资料模板里循环渲染数据:

<div class="user-assets">
    <h3>我的资产</h3>
    {% for asset in user_assets %}
        <div class="asset-item">
            <p><strong>资产名称:</strong> {{ asset.asset_name }}</p>
            <p><strong>IP地址:</strong> {{ asset.ip_address }}</p>
        </div>
    {% empty %}
        <p>暂无关联资产</p>
    {% endfor %}
</div>

额外优化:使用related_name简化查询

如果你的Asset模型的user字段设置了related_name='assets'(如开头的模型示例),还可以通过用户对象直接反向查询资产:

# 替代filter写法,效果完全一致
user_assets = request.user.assets.all().only('asset_name', 'ip_address')

常见错误示例(避坑)

不要尝试用字符串过滤,比如以下写法都会报错:

# 错误:用用户名字符串和User对象比较
Asset.objects.filter(user=request.user.username)

# 错误:用ID字符串而非数值
Asset.objects.filter(user_id=str(request.user.id))

内容的提问来源于stack exchange,提问作者alfred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:21:11