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

Django外键问题导致无法向watchlist表插入数据求助

问题分析与解决

1. 核心错误:函数与模型重名导致'function' object has no attribute 'objects'

你的视图函数名和模型类名都是watchlist,在视图内部调用watchlist.objects时,Python会优先识别为当前视图函数,而非models里的watchlist模型,直接引发该错误。

解决:
修改视图函数名,比如改成add_to_watchlist:

@login_required(login_url='login')
def add_to_watchlist(request):
    # 后续代码保持逻辑不变,仅函数名修改

2. User外键赋值错误

  • User.objects.filter(id=request.user)是错误写法:request.user已经是登录的User实例,不需要再去查询;且filter()返回的是QuerySet集合,而外键字段需要单个模型实例。
  • 直接用request.user即可赋值给外键。

修正代码:

# 替换原user查询代码
user = request.user

3. 其他潜在问题

(1) Stock模型未导入

models.py里的stock外键未导入,views.py里也没导入stock模型,会引发未定义错误。

  • 在models.py顶部导入stock模型(假设stock在当前app的models里):
from .models import stock  # 或者根据实际路径导入
  • 在views.py里导入:
from .models import watchlist, stock

(2) __str__方法返回非字符串类型

__str__方法要求返回字符串,但你返回的是DateTimeField实例,会引发类型错误,修改为:

def __str__(self):
    return str(self.stock_add_time)

(3) AutoField无需指定max_length

AutoField是自增主键,不需要设置max_length,可以简化:

watchlist_id = models.AutoField(primary_key=True)

修正后的完整代码示例

models.py

from django.db import models
from django.contrib.auth.models import User
from .models import stock  # 确保导入stock模型

class watchlist(models.Model):
    watchlist_id = models.AutoField(primary_key=True)
    stock_add_time = models.DateTimeField(auto_now=True)
    stock = models.ForeignKey(stock, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    objects = models.Manager()

    def __str__(self):
        return str(self.stock_add_time)

    class Meta:
        db_table = "watchlist"
        verbose_name = 'watchlist name'

views.py

from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
from .models import watchlist, stock

@login_required(login_url='login')
def add_to_watchlist(request):
    user = request.user
    stock_id = stock.objects.get(stock_id='1')

    watchlist.objects.create(stock=stock_id, user=user)
    return render(request, 'watchlist.html', {})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:55:06