你好,我正在使用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 %}
答案 0 :(得分:0)
您需要遵循过滤器中的外键关系。
posts = Post.objects.get(toUser=username)
尝试将密钥本身与用户名字符串进行比较,该用户名字符串是一个整数id。您需要这样做。
posts = Post.objects.get(toUser__username=username)
答案 1 :(得分:0)
我认为问题出在这里
posts = Post.objects.get(toUser=username)
toUser
是ForeignKey
模型的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-我建议您仔细阅读。