如何在表单验证中使用通过url传递的参数

时间:2013-12-07 20:04:40

标签: python django django-views

我有以下型号:

class ArticleUser(models.Model):
   email = models.EmailField(max_length=200)
   fullname = models.CharField(max_length=200)
   article = models.ForeignKey(Article)
   create_time =models.DateTimeField()
   def save(self, *args, **kwargs):
       ''' On save, update timestamps '''
       self.create_time = datetime.datetime.utcnow().replace(tzinfo=utc)
       super(ArticleUser, self).save(*args, **kwargs)

   class Meta:
       unique_together = (('email','article'),)

我正在通过网址传递article_id:

url(r'^articlebuffer/(?P<mid>\d+)/$',views.articlebuffer, name="articlebuffer"),

我需要在表单验证中使用article_id,以便文章和电子邮件是唯一的。我怎样才能在formset和form中实现它

以下是使用formset的视图:

def articlebuffer(request,mid):
   ArticleBufferFormSet = modelformset_factory(ArticleUser,exclude=('article','create_time'))    
    if request.method == 'POST':
        formset = ArticleBufferFormSet(request.POST)
        if formset.is_valid():
            instances = formset.save(commit=False)                
            for instance in instances:
                instance.article_id = mid
                try:
                    instance.save()
                except:
                    error="Unique Constraint Error"                    

            return HttpResponseRedirect('')
    else:
        formset = ArticleBufferFormSet(queryset= ArticleUser.objects.none())
    return render (request, 'tracking/createarticlebuffer.html',{'formset':formset,
                                                       })

1 个答案:

答案 0 :(得分:1)

在创建新的ArticleBufferFormSet

时,将其与POST数据一起包含在内
formset = ArticleBufferFormSet(dict(request.POST.items() + {'article_id': article_id}))