导致此错误的原因:以int()为基数10

时间:2019-07-13 13:33:22

标签: python django python-3.x django-views

你好,我正在使用Django开发一个简单的帖子应用

我必须为用户建模并发布模型
我想将所有帖子发送给特定的用户,而在尝试获取帖子时收到此错误消息

invalid literal for int() with base 10: 'user1'

这些是模型

用户模型

class MyUser(AbstractBaseUser):
    email = models.EmailField(verbose_name="email", max_length=60, unique=True)
    username = models.CharField(max_length=30, unique=True)
    date_joined = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
    last_login = models.DateTimeField(verbose_name='last login', auto_now=True)
    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)</pre>

帖子模型

class Post(models.Model):
    # post structure
    user = models.CharField(max_length=20, blank=True, default="Anonymous")  # sender
    content = models.TextField(blank=False)
    date = models.DateTimeField(auto_now_add=True)
    toUser = models.ForeignKey(MyUser, null=False, on_delete=models.CASCADE)
    post_id = models.AutoField(primary_key=True)</pre>

在此视图中,我正在URL中发送用户名变量 并尝试将所有帖子发送到该用户名

def user_posts(request, username):

    posts = Post.objects.get(toUser=username)

    return render(request=request,
                  template_name='post/user.html',
                  context={'posts', posts})

这是urls.py文件
urls.py

from django.urls import path
from. import views

app_name = "post"
urlpatterns = [

    path("", views.home, name="homepage"),
    path("register/", views.register, name="register"),
    path("logout/", views.logut_request, name="logout"),
    path("login/", views.login_request, name="login"),
    path("home/<username>", views.user_posts, name="get_Posts"),



]


user.html 文件


{% for p in posts %}
<div class="col s12 m6 l8">
    <div class="card blue darken-4">
           <div class="card-content white-text">
           <span class="card-title">from:{{ p.toUser }}</span>
               <p>{{ p.content }}</p>
        </div>

    </div>
</div>




{% endfor %}

2 个答案:

答案 0 :(得分:0)

您需要遵循过滤器中的外键关系。

posts = Post.objects.get(toUser=username)

尝试将密钥本身与用户名字符串进行比较,该用户名字符串是一个整数id。您需要这样做。

posts = Post.objects.get(toUser__username=username)

答案 1 :(得分:0)

我认为问题出在这里

posts = Post.objects.get(toUser=username)

toUserForeignKey模型的MyUser,因此,您可以通过传入该模型的整个对象或其ID来引用该值。在这里,您在username中传递了一个字符串,该字符串不起作用-似乎Django试图将其转换为int id,并在不能时抛出错误。

您显然想按用户名查找用户,因为这是一个唯一字段。为此,您可以先按用户名查找用户,然后将其传递给帖子查询:

user = MyUser.objects.get(username=username)
posts = Post.objects.filter(toUser=user)

或更简洁地说,使用跨关系的查找:

posts = Post.objects.filter(toUser__username=username)

请注意,我已将get的使用更改为filter,因为get仅用于预期返回一个准确的结果的查询,而且您的模型中没有任何东西表明用户每个人只有一个帖子。

完整的Django查询API是here-我建议您仔细阅读。