Python 在列表django中存储数据列表
我正在创建一个向上投票系统,用户向上投票,但是为了防止用户不止一次地投票,我需要存储所有向上投票的用户的列表,我正在使用sqlite3数据库,我想知道如何在我的帖子模型中将这些用户存储在列表中,我尝试过几种不同的选择,但都不奏效 数据库:sqlite3 Python版本:3.8 Django版本:3.0.3 当前尝试: models.py:Python 在列表django中存储数据列表,python,django,sqlite,Python,Django,Sqlite,我正在创建一个向上投票系统,用户向上投票,但是为了防止用户不止一次地投票,我需要存储所有向上投票的用户的列表,我正在使用sqlite3数据库,我想知道如何在我的帖子模型中将这些用户存储在列表中,我尝试过几种不同的选择,但都不奏效 数据库:sqlite3 Python版本:3.8 Django版本:3.0.3 当前尝试: models.py: class Upvote(models.Model): user = models.ForeignKey(User, on_delete=model
class Upvote(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
当前代码:
def up_vote(request, pk):
current_user=request.user
pk=Post.objects.get(pk)
try:
post_instance = Post.objects.get(pk)
upvote = Upvote(post=post_instance, user=current_user)
except Upvote.DoesNotExist:
post_instance = Post.objects.get(pk)
upvote = Upvote(post=post_instance, user=current_user)
return redirect(Post(pk))
对于这种类型的数据,通常最好创建一个新模型,例如,名为“Upvotes”,它将有3个字段:
class Upvotes(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
timestamp = models.DateTimeField(auto_now_add=True)
通过这种方式,您将创建一个表,该表将包含所有对某条评论投了赞成票的用户以及他们对哪条评论投了赞成票,包括日期和时间
我希望这会有所帮助。对于这种类型的数据,通常最好创建一个新模型,例如,名为“Upvotes”的模型,该模型将有3个字段:
class Upvotes(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
timestamp = models.DateTimeField(auto_now_add=True)
通过这种方式,您将创建一个表,该表将包含所有对某条评论投了赞成票的用户以及他们对哪条评论投了赞成票,包括日期和时间
我希望它能有所帮助。您需要一个
向上投票
模型,该模型带有Post
模型的外键。以此为例:
class Upvote(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
用户向上投票后,您将在Upvote
表中创建一行。您可以使用try块检查用户是否已对帖子进行了投票:
try:
upvote = Upvote.objects.get(post=some_post, user=some_user)
# User has upvoted
# Response accordingly
except Upvote.DoesNotExist:
upvote = Upvote(post=some_post, user=some_user)
# Create the upvote
编辑关于错误,当您使用外键创建或查询模型的新实例时,应该传递外键的实例,而不是类本身。你现在是:
upvote = Upvote(post=Post, user=current_user)
# Notice the Post
Post
是类Post
的定义。您应该做的是创建/获取类的一个实例Post
,并传递它。例如:
post_instance = Post.objects.get(pk=2) # Or whatever query you might need to use or even creating a new post
upvote = Upvote(post=post_instance, user=current_user)
您需要一个
Upvote
模型,该模型带有Post
模型的外键。以此为例:
class Upvote(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
用户向上投票后,您将在Upvote
表中创建一行。您可以使用try块检查用户是否已对帖子进行了投票:
try:
upvote = Upvote.objects.get(post=some_post, user=some_user)
# User has upvoted
# Response accordingly
except Upvote.DoesNotExist:
upvote = Upvote(post=some_post, user=some_user)
# Create the upvote
编辑关于错误,当您使用外键创建或查询模型的新实例时,应该传递外键的实例,而不是类本身。你现在是:
upvote = Upvote(post=Post, user=current_user)
# Notice the Post
Post
是类Post
的定义。您应该做的是创建/获取类的一个实例Post
,并传递它。例如:
post_instance = Post.objects.get(pk=2) # Or whatever query you might need to use or even creating a new post
upvote = Upvote(post=post_instance, user=current_user)
谢谢,我没想过。我现在就试试。谢谢,我没想过。现在我将尝试如何为Post模型创建外键。我知道这可能很简单,但我是Django框架的新手如果帖子位于其他地方,可能在另一个应用程序中,您可以使用字符串给出路径,例如models.ForeignKey('myOtherApp.post',on_delete=models.CASCADE)好的,我刚刚尝试了你的解决方案,出现了一个错误,我将立即更新我的帖子谢谢更新,我刚刚尝试了,现在得到一个类型错误:non-iterable intobject@LukeAcko13请使用日志或代码更新您的问题我如何为Post模型创建外键。我知道这可能很简单,但我是Django框架的新手如果帖子位于其他地方,可能在另一个应用程序中,您可以使用字符串给出路径,例如models.ForeignKey('myOtherApp.post',on_delete=models.CASCADE)好的,我刚刚尝试了你的解决方案,出现了一个错误,我将立即更新我的帖子谢谢更新,我刚刚尝试了,现在得到一个类型错误:non-iterable intobject@LukeAcko13请用日志或代码更新您的问题