簡體   English   中英

使用TaggableManager處理Django中的M2M關系

[英]Using TaggableManager for m2m relationship in django

我正在嘗試使用TaggableManager()在Django應用程序中的表單中添加標簽,但這似乎不起作用。

class UserBookmark(models.Model):

    user = models.ForeignKey(User)
    bookmark = models.URLField()
    tag = TaggableManager()

    def __str__(self):
        return '%i %s %s'%(self.id,self.user,self.bookmark)

我的html模板:

<div class="modal-body">
   <form name = "form2" id = "form2" method = "post" action = "{% url 'savetag' %}" class = "form-inline">
      {% csrf_token %}
      <div class = "form-group">
         <input name = "tag"  id = "tag" required>
         <input type="hidden" id = "field1" name="bookmark" value="">
         <button type = "submit" class = "btn btn-danger">Save</button>
      </div>
   </form>
</div>

views.py:

def save_tag(request):

    tagslist = request.POST.getlist("tag")
    bookmark = request.POST.get("bookmark")
    obj=UserBookmark.objects.get(bookmark = bookmark)
    user = request.user.pk
    obj.tag = tagslist
    obj.save()

當我打這個查詢

UserBookmark.objects.filter(tag__name__in = ['java'])

我得到空集,而我確實有帶有此標簽java的記錄。

之前,我的UserBookmark模型標簽屬性是CharField

tag = models.CharField(max_length = 100)

但這不起作用,因為標簽具有多對多的關系,因為書簽可以包含許多標簽,所以CharField不起作用。

有人可以告訴我在這里需要更正什么嗎?

您必須使用add()在ManyToMany字段中添加項目

def save_tag(request):
   # Use get() instead of getlist() beacuse in request it is a string 'Python,Data Science' not array
   tagslist = request.POST.get("tag")
   # Use split to make it a list
   tagslist = [str(r) for r in taglist.split(',')]
   ...
   # use add to add item in ManyToMany field.
   obj.tag.add(*tagslist)
   obj.save()

現在您的查詢將正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM