How do I store information about a front-end button on the Django server?
Is it just a matter of creating a model for the buttons and then
  querying the database like normal?

Model could be something like Button (_id, last_clicked as timestamp, user_id)
While querying you could simply sort by timestamp and LIMIT 1 to get the last click. By not overwriting the original value it would ensure a bit faster write. 
If you don't want the buttons to behave similarly for each user you will have to create a mapping of the button with the user who clicked it. Even if your current requirements don't need them, create an extensible solution where mapping the user with this table is quite easy. 

How do I have Django update the database after 30 seconds to make a
  button's status go from disabled back to enabled?

I avoid changing the database without a client request mapped to the change. This ensures the concurrency and access controls. And also has higher predictability for the current state of data. Following that, I would suggest not to update the db after the time delta(30 sec). 
Instead of that you could simply compare the last_clicked timestamp and calculate the delta either server side before sending the response or in client side. 
This decision could be important, consider a scenario when the client has a different time on his system than the server time.

When the user presses the button it's going to make it disabled, but
  it will only be making it disabled in the database. What is the proper
  way to actually disable the button without a page refresh on the
  client side? Do I just disable the button in javascript for 30
  seconds, and then if they try to refresh the page then the views will
  see the request for the list of products and it will check the
  database for each button's status and it will serve the button
  correctly?

You'd need to do a POST request to communicate the button press timestamp with the db. You'd also need to ensure that the POST request is successful as an unsuccessful request would not persist the data in case of browser closure. 
After doing the above two you could disable the button only from the client side without trying the get the button last_clicked timestamp.
Basically I want to store a buttons service server-side that way it can persist through browser closes and page refresh.
Here's what the user is trying to do

The user searches in a search bar for a list of products.
When the results show up, they are shown a button that triggers an action for each individual product. They are also shown a master button that can trigger the same action for each product that is listed.
Upon clicking the button, I want to disable it for 30 seconds and have this persist through page refreshes and browser close.

What I've done
Currently I have this implemented using AJAX calls on the client side, but if the page refreshes it resets the button and they can click it again. So I looked into using javascript's localStorage function, but in my situation it would be better just to store this on the server.
What I think needs to happen

Create a model in my Django app for a button. Its attributes would be its status and maybe some meta data (last clicked, etc).
Whenever the client requests a list of products, the views will send the list of products and it will be able to query the database for the respective button's status and implement a disabled attribute directly into the template.
If the button is available to be pressed then the client side will make an AJAX POST call to the server and the server will check the buttons status. If it's available it will perform the action, update the buttons status to disabled for 30 seconds, and send this info back to the client in order to reflect it in the DOM.

A couple questions

Is it just a matter of creating a model for the buttons and then querying the database like normal?
How do I have Django update the database after 30 seconds to make a button's status go from disabled back to enabled?
When the user presses the button it's going to make it disabled, but it will only be making it disabled in the database. What is the proper way to actually disable the button without a page refresh on the client side? Do I just disable the button in javascript for 30 seconds, and then if they try to refresh the page then the views will see the request for the list of products and it will check the database for each button's status and it will serve the button correctly?

Thank you very much for the help!!