Python 如何使用模型表单更新django中的博客文章?

Python 如何使用模型表单更新django中的博客文章?,python,django,forms,model,modelform,Python,Django,Forms,Model,Modelform,我正在用django创建一个博客。我正在使用模型表单进行输入。我想编辑一篇现有的博客文章,但无法使其正常工作 型号.py class tags(models.Model): name = models.CharField(max_length = 30) def __str__(self): return self.name class Article(models.Model): title = models.CharField(max_length=60) post

我正在用django创建一个博客。我正在使用模型表单进行输入。我想编辑一篇现有的博客文章,但无法使其正常工作

型号.py

class tags(models.Model):
name = models.CharField(max_length = 30)
def __str__(self):
    return self.name

class Article(models.Model):
    title = models.CharField(max_length=60)
    post = HTMLField()
    editor = models.ForeignKey(User,on_delete=models.CASCADE)
    tag = models.ManyToManyField(tags,blank=True)
    pub_date = models.DateTimeField(auto_now_add=True)
    article_image = models.ImageField(upload_to='articles/', blank=True)
    photo_credits = models.CharField(max_length=60,default='unsplash.com')
class UpdateArticleForm(forms.ModelForm):
class Meta:
    model = Article
    fields = ['title','article_image','post','tags','photo_credits']
@login_required(login_url='/accounts/login/')
    def update_article(request,id):
    instance = Article.objects.get(id = id)
    if request.method == 'POST':
        form = UpdateArticleForm(request.POST, request.FILES,instance=instance)
        if form.is_valid():
            form.save()
            return redirect('index')
    else:
        form = UpdateArticleForm(instance=instance)
    return render(request,'article/update.html',{'form':form})
url(r'^article/update/$',views.update_article,name='update_article'),
Forms.py

class tags(models.Model):
name = models.CharField(max_length = 30)
def __str__(self):
    return self.name

class Article(models.Model):
    title = models.CharField(max_length=60)
    post = HTMLField()
    editor = models.ForeignKey(User,on_delete=models.CASCADE)
    tag = models.ManyToManyField(tags,blank=True)
    pub_date = models.DateTimeField(auto_now_add=True)
    article_image = models.ImageField(upload_to='articles/', blank=True)
    photo_credits = models.CharField(max_length=60,default='unsplash.com')
class UpdateArticleForm(forms.ModelForm):
class Meta:
    model = Article
    fields = ['title','article_image','post','tags','photo_credits']
@login_required(login_url='/accounts/login/')
    def update_article(request,id):
    instance = Article.objects.get(id = id)
    if request.method == 'POST':
        form = UpdateArticleForm(request.POST, request.FILES,instance=instance)
        if form.is_valid():
            form.save()
            return redirect('index')
    else:
        form = UpdateArticleForm(instance=instance)
    return render(request,'article/update.html',{'form':form})
url(r'^article/update/$',views.update_article,name='update_article'),
视图.py

class tags(models.Model):
name = models.CharField(max_length = 30)
def __str__(self):
    return self.name

class Article(models.Model):
    title = models.CharField(max_length=60)
    post = HTMLField()
    editor = models.ForeignKey(User,on_delete=models.CASCADE)
    tag = models.ManyToManyField(tags,blank=True)
    pub_date = models.DateTimeField(auto_now_add=True)
    article_image = models.ImageField(upload_to='articles/', blank=True)
    photo_credits = models.CharField(max_length=60,default='unsplash.com')
class UpdateArticleForm(forms.ModelForm):
class Meta:
    model = Article
    fields = ['title','article_image','post','tags','photo_credits']
@login_required(login_url='/accounts/login/')
    def update_article(request,id):
    instance = Article.objects.get(id = id)
    if request.method == 'POST':
        form = UpdateArticleForm(request.POST, request.FILES,instance=instance)
        if form.is_valid():
            form.save()
            return redirect('index')
    else:
        form = UpdateArticleForm(instance=instance)
    return render(request,'article/update.html',{'form':form})
url(r'^article/update/$',views.update_article,name='update_article'),
url.py

class tags(models.Model):
name = models.CharField(max_length = 30)
def __str__(self):
    return self.name

class Article(models.Model):
    title = models.CharField(max_length=60)
    post = HTMLField()
    editor = models.ForeignKey(User,on_delete=models.CASCADE)
    tag = models.ManyToManyField(tags,blank=True)
    pub_date = models.DateTimeField(auto_now_add=True)
    article_image = models.ImageField(upload_to='articles/', blank=True)
    photo_credits = models.CharField(max_length=60,default='unsplash.com')
class UpdateArticleForm(forms.ModelForm):
class Meta:
    model = Article
    fields = ['title','article_image','post','tags','photo_credits']
@login_required(login_url='/accounts/login/')
    def update_article(request,id):
    instance = Article.objects.get(id = id)
    if request.method == 'POST':
        form = UpdateArticleForm(request.POST, request.FILES,instance=instance)
        if form.is_valid():
            form.save()
            return redirect('index')
    else:
        form = UpdateArticleForm(instance=instance)
    return render(request,'article/update.html',{'form':form})
url(r'^article/update/$',views.update_article,name='update_article'),
我得到一个404错误。如果我用下面的url替换url,我会得到一个“update\u article”的
反向,没有找到任何参数。尝试了1种模式:[“article/update/(?P[0-9]+)/$”]

    url(r'^article/update/(?P<id>[0-9]+)/$',views.update_article,name='update_article'),
url(r'^article/update/(?P[0-9]+)/$),views.update\u article,name='update\u article'),

如何才能使其正常工作?

您的视图和url配置是正确的,错误可能存在于模板中。尝试在模板中找到
{%url“update_article”%}
,并替换为
{%url“update_article”%}

注意表单中有“tags”字段,但在model中您将其命名为“tag”。

我的models.py中有标签模型。我已编辑以显示it@GeoffreyMungai将
替换为您想要编辑的真实
文章id
,这就是我首先使用
的原因。例如,如果您使用变量
article
呈现文章,则使用{%url“update\u article”article.id%}进行更新