If you're using generic view you should have a look at https://docs.djangoproject.com/en/1.6/ref/class-based-views/generic-editing/#createview and look for the methods you inherited from the ancestors (MROs).
Here you could override the post method to assign a value to the pub_date field before saving the model instance. Something like:
class PostCreate(generic.CreateView):
template_name = 'post/post_form.html'
form_class = PostForm
def post(self, request, *args, **kwargs):
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.pub_date = datetime.now()
post.save()
return self.form_valid(form)
return self.form_invalid(form)
You could even use form_valid method override directly.
Either way, remind that the view can be called with a GET request (involving the presentation of the form, usually empty for create views) and with a POST (form submission).
Look at the Django doc for ModelForm to better understand bound and unbound form behaviour.
Hope this helps!