簡體   English   中英

Django UNIQUE約束失敗:webapp_post.slug

[英]Django UNIQUE constraint failed: webapp_post.slug

當我嘗試創建新的Post對象時,Python噴出以下錯誤:

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

@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))

Django報告說該數據庫將不會保存您的Post數據,因為slug字段的值已被另一個Post

如果您不希望這種行為,請不要在模型中的Post.slug unique屬性設置為True 但是請考慮一下,該slug通常用於查詢數據庫以找到關聯的Post ,因此通常您希望它是唯一的。

暫無
暫無

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

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