我被告知建议使用ForeignKey(User)
作为用户名字段,所以我现在尝试实现。但是我无法从当前的Charfield()转换为ForeignKey()字段。
下面的代码显示了我当前CharField()
如何用于协助ajax调用。它目前的工作原理是点击用户名,该用户名点击该用户名的HTML,然后通过搜索CharField()
这样profile = Profile.objects.get(username=username_clicked)
来查看.get()任何个人资料。顺便说一下,点击该用户名的HTML来自另一个Charfield()
,author
,这是我的评论模型中有人发表评论的字段。因此,ajax调用会打开一个小型配置文件框,其中包含用户点击的一些详细信息。这是我的代码:
个人资料模型
class Profile(models.Model):
username = models.CharField(max_length=32, default='AnonymousUser')
age = models.IntegerField(default=0)
points = models.IntegerField(default=0)
def __str__(self):
return self.username
JS
$('a.username').on('click', function() {
var username = $(this).html();
var url = "/raise_profile/";
$.ajax({
type: 'GET',
url: url,
data: {
username_clicked: username,
csrfmiddlewaretoken: $("input[name='csrfmiddlewaretoken']").val()
},
success: function (data) {
$('.profile_username').html(data.username);
$('.profile_age').html(data.age);
$('.profile_points').html(data.points);
}
})
});
查看
def raise_profile(request):
username_clicked = request.GET.get('username_clicked')
if request.is_ajax():
profile = Profile.objects.get(username=username_clicked)
profileAge = profile.age
profileUsername = profile.username
profilePoints = profile.points
return JsonResponse({'age': profileAge, 'username': profileUsername, 'points': profilePoints})
评论模型
class Comment(models.Model):
comment_text = models.TextField(max_length=350, blank=True, null=True)
author = models.CharField(max_length=120, blank=True)
评论模板
<h3><a class="username">{{ i.author }}</a></h3>
有人可以告诉我如何更改当前进程,以便我可以使用ForeignKey()而不是CharField()作为我的用户名/作者字段吗?我被告知在这种情况下使用ForeignKey()
会改善功能。
此处还有我的评论功能,其中包括添加author
字段(评论人的用户名,CharField()
):
def user_comment(request):
if request.is_ajax():
comment = CommentForm(request.POST or None)
ajax_comment = request.POST.get('text') #the comment
id = request.POST.get('id')
if comment.is_valid():
comment = Comment.objects.create(comment_text=ajax_comment, author=str(request.user), destination=id)
comment.save()
username = str(request.user)
return JsonResponse({'text': ajax_comment, 'username': username})
答案 0 :(得分:0)
为什么要使用CharField()。一个更好的解决方案是将Comment
模型中的作者作为User
的外键。现在,您使用的是<a>
代码,请使用其href
属性来保存指向作者个人资料的网址。简单干净。
例如,
class Comment(models.Model):
text = field
author = models.ForeignKey(User)
现在,<a>
可以是<a href="/url_to_user_profile/id_of_author/">Author Name<a/>
。当用户单击此锚标记时,获取其href并根据传递的id显示作者配置文件。
修改强>
从下面的评论中,您不希望页面刷新,因此您的点击处理程序就像
$("a").on("click", "function(event){
event.preventDefault();
//Make an ajax call here
});