In the last post on this blog, I showed you how to create a simple modelform. In this post, I'll show you how to add a field with a ForeignKey (not showing in the form).
Typical use for this is author for blog posts and similar.
Adding the field
Open up "product/models.py" from the previous post and add the following content:
# Import the user model
from django.contrib.auth.models import User
class Product(models.Model):
# Add the user field
user = models.ForeignKey(User, related_name='products', on_delete=models.CASCADE)
Now you need to run the makemigrations and migrate script before we continue.
Changing the view
We don't need to do any changes to the form, but we need some minor changes to the view.
def addproduct(request):
if request.method == 'POST':
form = ProductForm(request.POST)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.save()
return redirect('/')
else:
form = ProductForm()
context = {
'form': form
}
return render(request, 'addproduct.html', context)
And that's it actually. We just need to prevent the form from saving by creating a new instance and adding "commit=False". Then we add the user and save the object.