2016-04-13 6 views
1

を私は新しいPostオブジェクトを作成しようとしていた場合、Pythonは次のエラーを吐き出す:ここジャンゴUNIQUE制約が失敗しました:webapp_post.slug

UNIQUE constraint failed: webapp_post.slug 

は私のmodels.pyは

class Post(models.Model): 
    title = models.CharField(max_length=200) 
    slug = models.SlugField(unique=True) 
    text = models.TextField() 
    created_on = models.DateTimeField(auto_now_add=True) 
    up_vote = 0 # num of up votes 
    down_vote = 0 #num of down votes 
    vote_total = up_vote - down_vote 
    author = models.ForeignKey('auth.User', null=True, blank=True) 

    CHOICES = [ 
     ('Hardware and OS', 'Hardware and OS'), 
     ('Desktops', 'Desktops'), 
     ('Tablets', 'Tablets'), 
     ('Phones', 'Phones'), 
     ('Wearables', 'Wearables'), 
     ('Windows', 'Windows'), 
     ('Mac OS X', 'Mac OS X'), 
     ('Linux and Unix', 'Linux and Unix'), 
     ('Programming and Computer Science', 'Programming and Computer Science'), 
     ('Software Development', 'Software Development'), 
     ('Web Development (Front)', 'Web Development (Front)'), 
     ('Web Development (Back)', 'Web Development (Back)'), 
     ('Mobile Development', 'Mobile Development'), 
     ('Game Development', 'Game Development'), 
     ('Algorithms and Data Structures', 'Algorithms and Data Structures'), 
     ('Databases', 'Databases'), 
     ('IDE/Text Editors', 'IDE/Text Editors'), 
     ('Tutorial', 'Tutorial'), 
     ('Opinion', 'Opinion'), 
     ('Miscellaneous', 'Miscellaneous') 
    ] 
    field = models.CharField(choices=CHOICES, max_length=200) 

    def __unicode__(self): 
     return self.title 

    @models.permalink 
    def get_absolute_url(self): 
     return ('blog_post_detail',(), 
       { 
        'slug' :self.slug, 
       }) 

    def save(self, *args, **kwargs): 
     if not self.slug: 
      self.slug = slugify(self.title) 
     super(Post, self).save(*args, **kwargs) 

ですここに私のviews.pyは、Djangoはデータベースがあるため、あなたのPostデータを保存しないことを報告している

@user_passes_test(lambda u: u.is_authenticated) 
def add_post(request): 
    form = PostForm(request.POST or None) 

    if request.method == "POST": 
     if form.is_valid() and request.user.is_authenticated(): 
      try: 
       post = form.save(commit=False) 
       post.author = request.user 
       post.save() 
       Post.objects.create(author=request.user, title=form.cleaned_data.get("title"), text=form.cleaned_data.get("text")) 
       return redirect(post) 
      except IntegrityError as e: 
       print(e) 
     else: 
      print("Invalid form") 
      print(form.errors) 

    return render_to_response('webapp/startthread.html', 
           { 'form': form, 
           "authenticated": request.user.is_authenticated() }, 
           context_instance=RequestContext(request)) 

答えて

4

ですslugフィールドの値はすでに別のPostによって使用されています。

この現象が発生しないようにするには、ご使用のモデルでのTruePost.slugに設定しないでください。しかし、slugは、関連するPostを見つけるためにデータベースを照会するためによく使われるので、一般的には一意にしたいと考えています。

関連する問題