Javascript 单击收藏夹按钮将对象添加(并保存)到Django用户模型中的多对多字段中
当您单击google地图标记(在本例中是一个树对象)时,会弹出一个信息窗口,窗口上有一个心形按钮,让用户有机会心形(支持)这棵树。通过这样做,它将把树对象添加到userprofile的树字段(这是一个多对多字段)。但不幸的是,我在将树对象添加到userprofile的树字段时遇到了问题 下面是详细的代码: 心脏按钮(在index.html上) atree参数获取treeID,treeID是对象的主键-我知道这部分正在工作,因为我已经用警报对它进行了测试。接下来的几行代码没有运行,我认为这是我问题的症结所在:Javascript 单击收藏夹按钮将对象添加(并保存)到Django用户模型中的多对多字段中,javascript,python,django,many-to-many,Javascript,Python,Django,Many To Many,当您单击google地图标记(在本例中是一个树对象)时,会弹出一个信息窗口,窗口上有一个心形按钮,让用户有机会心形(支持)这棵树。通过这样做,它将把树对象添加到userprofile的树字段(这是一个多对多字段)。但不幸的是,我在将树对象添加到userprofile的树字段时遇到了问题 下面是详细的代码: 心脏按钮(在index.html上) atree参数获取treeID,treeID是对象的主键-我知道这部分正在工作,因为我已经用警报对它进行了测试。接下来的几行代码没有运行,我认为这是我问题
favTree = Tree.objects.get(pk=atree)
user.userprofile.tree.add(favTree)
我试图做的是获取tree对象并将其添加到userprofile的tree(多对多)字段中
任何关于我应该去哪里或我做错了什么的见解都将受到赞赏
谢谢
A但是。。。这就是Python代码。你不能突然期望在一个JavaScript中间运行它。我能在Vist.Py中运行函数吗?是的。向执行此操作的视图发出Ajax请求。
<script>
function favButton(atree){
{% if user.is_authenticated %}
favTree = Tree.objects.get(pk=atree)
user.userprofile.tree.add(favTree)
alert("hearted tree is added to your favourites");
{% else %}
alert("please login to heart a tree");
{% endif %}
}
</script>
class Tree(models.Model):
treeId = models.IntegerField(primary_key=True)
neighbourhood = models.CharField(max_length=128, blank=True)
commonName = models.CharField(max_length=128, blank=True)
diameter = models.FloatField(null=True, blank=True)
streetNumber = models.PositiveSmallIntegerField(null=True, blank=True)
street = models.CharField(max_length=128, blank=True)
# Populated by sending street address to google and receiving lat lon output
lat = models.FloatField(null=True, blank=True)
lon = models.FloatField(null=True, blank=True)
def save(self, *args, **kwargs):
self.slug = slugify(self.treeId)
super(Tree, self).save(*args, **kwargs)
def __unicode__(self):
return str(self.treeId)
class UserProfile(models.Model):
# This line is required. Links UserProfile to a User model instance.
user = models.OneToOneField(User)
# The additional attributes we wish to include for a user.
website = models.URLField(blank=True)
picture = models.ImageField(upload_to='profile_images', blank=True)
# Tree field is used to store user's favourite trees
tree = models.ManyToManyField(Tree, blank=True)
def __unicode__(self):
return self.user.username
favTree = Tree.objects.get(pk=atree)
user.userprofile.tree.add(favTree)