2016-11-17 12 views
0

사용자가 자신의 게시물에 태그를 달 수 있기를 원합니다. 따라서 그는 텍스트 필드에 단어를 입력하고이를 ","로 구분합니다. 그가 끝나면 그는 저장을 누르고 그가 입력 한 모든 태그는 그 게시물에 저장됩니다. django-taggit을 사용하고 있지만 사용자가 필드에 단어를 입력하면 게시물과 함께 저장되지 않습니다. 하지만 장고 관리 사이트에서 그렇게하면 완벽하게 작동합니다. 여기 보기 파일에서 django-taggit을 사용하는 방법

내 코드입니다 :

models.py :

class Post(models.Model): 
    STATUS_CHOICES = (
     ('draft', 'Draft'), 
     ('published', 'Published'),  
    ) 

    title = models.CharField(max_length=250) 
    slug = models.SlugField(max_length=250, 
          unique_for_date='publish') 
    author = models.ForeignKey(settings.AUTH_USER_MODEL, 
           related_name='blog_posts') 
    body = RichTextUploadingField() 
    publish = models.DateTimeField(default=timezone.now) 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    status = models.CharField(max_length=10, 
           choices=STATUS_CHOICES, 
           default='draft') 
    objects = models.Manager() # The default manager 
    published = PublishedManager() # Our custom manager 
    tags = TaggableManager() 
    category = models.ForeignKey(BlogCategory, related_name='post_category') 

    header_photo = models.ImageField(upload_to = 'users/%Y/%m/%d', 
             null = True, 
             blank = True, 
             width_field="width_field", 
             height_field="height_field" 
             ) 
    width_field = models.IntegerField(default = 0, null = True) 
    height_field = models.IntegerField(default=0, null = True) 

forms.py :

class CreatePostForm(forms.ModelForm): 
    class Meta: 
     model = Post 
     fields = ('title', 'status', 'header_photo', 'body', 'tags') 

views.py :

@login_required(login_url='account_login') 
def create_post(request): 
    if request.method == 'POST': 
     post_form = CreatePostForm(data=request.POST, files=request.FILES) 
     if post_form.is_valid(): 
      new_post = post_form.save(commit=False) 
      new_post.author = request.user 
      profile = Profile.objects.get(profile_user=request.user) 
      new_post.category = profile.type_of_blogger 
      new_post.slug = slugify(new_post.title) 
      new_post.save() 
      messages.success(request, 'Post created successfully', extra_tags='post_saved') 
      # redirect to new created item detail view 
      return redirect(new_post.get_absolute_url()) 
    else: 
     post_form = CreatePostForm() 
    context = {'post_form': post_form} 
    return render(request, 
        'blog/post/create_post.html', 
        context) 

urls.py :

HTML에서 91,363,210
urlpatterns = [ 
    # post views 
    url(r'^$', views.post_list, name='post_list'), 
    url(r'^create/$', views.create_post, name='create_post'), 
    url(r'^detail/(?P<id>\d+)/(?P<slug>[-\w]+)/$', views.post_detail, name='post_detail'), 
] 

내 양식 :

<form class="form-horizontal text-center" method="post" action="." enctype="multipart/form-data"> 
        {% csrf_token %} 
        {{ post_form.media }} 
        <fieldset> 
         <div class="container text-center" style="margin-bottom: 20px"> 
          <h2 style="color: #c1b4b4;">Upload the header picture for your post</h2> 
          {% render_field post_form.header_photo style="background-color: #E8E8E8" %} 
         </div> 
         <div class="form-inline text-center"> 
          <div class="form-group" style="margin-bottom: 20px;"> 
           {% render_field post_form.title class="form-control" placeholder="Blog title" %} 
           {% render_field post_form.status class="form-control" %} 
           <p>Tag your post, so users can easy find it.</p> 
           {% render_field post_form.tags class="form-control" %} 
          </div> 
         </div> 
         {% render_field post_form.body class="form-control" %} 
         <hr> 
         <div class="control-group"> 
          <!-- Button --> 
          <div class="controls" style="margin-bottom: 20px"> 
           <button class="btn btn-lg btn-success" style="min-width: 300px">Save</button> 
          </div> 
         </div> 
         {% if redirect_field_value %} 
         <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" /> 
         {% endif %} 
        </fieldset> 
       </form> 

당신의 도움에 감사드립니다.

답변

0

save_m2m() 메소드를 사용해보십시오. docs에서

: 양식을 저장할 때, 당신은 커밋 = 거짓 옵션을 사용하는 경우 개체를 저장 한 후

당신은 양식에 전화 save_m2m()해야합니다 단지 을 당신에게로 그것에 많은 분야에 많은 정상과 형태에 대한 것입니다 : 당신이 응답을

if request.method == "POST": 
form = MyFormClass(request.POST) 
if form.is_valid(): 
    obj = form.save(commit=False) 
    obj.user = request.user 
    obj.save() 
    # Without this next line the tags won't be saved. 
    form.save_m2m() 
+0

흠 당신을 감사합니다, 지금 당장 그것을 시도 할 수는 없지만 최대한 빨리처럼 나는 당신의 대답을 받아 들일 것입니다. – P3P5