【问题标题】:Field 'id' expected a number but got字段 'id' 需要一个数字,但得到了
【发布时间】:2021-02-18 19:33:54
【问题描述】:

我尝试在 Django 中构建跟随系统,它显示字段 'id' 需要一个数字,但得到了 ''。如何获取我授予的当前profile用户的pk。

这是我的看法

def follow_unfollow_profile(request, **kwargs):
    if request.method == 'POST':
        my_account = Account.objects.get(username=request.user)
        pk = request.POST.get('account_pk')
        obj = Account.objects.get(pk=pk)

        if obj.username in my_account.following.all():
            my_account.following.remove(obj.username)
        else:
            my_account.following.add(obj.username)
        return redirect(request.META.get('HTTP_REFERER'))

这是网址

path('<int:user_id>/', account_view, name="view"),
path('follow/', follow_unfollow_profile, name='follow-unfollow-view'),

我尝试获取对象pk的形式

<form action="{% url 'account:follow-unfollow-view'%}" method="POST">
    {% csrf_token %}
    <input type="hidden" name="account_pk" value={{account.pk}}>
    <button type="submit" class="btn btn-success">Follow</button>
</form>

【问题讨论】:

  • 总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是截图,不是链接到外部门户)有问题(不是评论)。还有其他有用的信息。
  • 也许首先在浏览器的 HTML 中检查您在form 中的内容(即 Ctrl+U),然后在 django 中检查您在 request.POST 中获得的内容 - 也许您将空字符串发送到模板和浏览器得到value="",然后你在django中得到空字符串。生成此表单的函数在哪里?

标签: python django django-models django-views


【解决方案1】:

首先,您必须更改行,除非您的用户名是主键:

 my_account = Account.objects.get(username=request.user)

收件人:

my_account = Account.objects.get(pk=request.user.id)

在这一行中,您尝试将字符串(用户名)放入 manytomany 字段:

    if obj.username in my_account.following.all():
        my_account.following.remove(obj.username)
    else:
        my_account.following.add(obj.username)

改成:

    if obj in my_account.following.all():
        my_account.following.remove(obj)
    else:
        my_account.following.add(obj)

这不是好的做法:

redirect(request.META.get('HTTP_REFERER'))

【讨论】:

    【解决方案2】:

    当您运行服务器或迁移迁移时会发生这种情况吗?

    如果发生在那个时候。

    1. 第一个真正可能的解决方案是您应该删除 SQL 然后重新加载 sql 文件(例如,我使用 --> db.sqlite3 将信息保存到数据库中)然后当您输入包含在 INSTALLED_APPS 中的文件时,您必须看到迁移文件夹,然后您需要在其中输入,因为您可以看到名为 init 的文件,删除除 init(不要因为包文件而删除)

    2. 第二种解决方案相当复杂的方法是您可以使用数据库并通过使用您在数据库中的智能来一一更改。

    【讨论】:

      猜你喜欢
      • 2021-08-31
      • 2021-07-03
      • 2021-06-03
      • 2021-01-22
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      相关资源
      最近更新 更多