Save id(ForeignKey) field with the associated user in Django
I have model Drummer:
class Drummer(models.Model):
first_name = models.CharField(max_length=32, verbose_name='Name')
last_name = models.CharField(max_length=32, verbose_name='Last Name')
date_of_birth = models.DateField(verbose_name='Date of birth', blank=True, null=True)
date_of_death = models.DateField(verbose_name='Date of death',
blank=True, null=True, default=None)
bio = models.TextField(verbose_name='Bio')
photo = models.ImageField(upload_to='images', null=True, verbose_name='Photo')
slug = models.SlugField(max_length=250, db_index=True, null=True, unique=True, verbose_name='URL')
group_name = models.ManyToManyField('Group', verbose_name='Group')
users_drummer = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True
with the field users_drummer:
users_drummer = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
In template I am allowing edit drummers that were created by a specific user:
{% if request.user.id == person.users_drummer.pk %}
...edit...
where person is an instance of Drummer model
The problem is, that when I save form from a specific user, field users_drummer saves null field to data base, but I need that when user typed all form fields, field users_drummer would save with the associated user (users_id). Field users_drummer I don't output in the form because user don't have to manipulate with this field. The question is, how can I do that when user fills the form, the form would save into data base with users_drummer field with associated user? Something like this: users_drummer = user.id
The form:
class AddDrummerForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['date_of_death'].required = False
self.fields['date_of_birth'].required = False
self.fields['photo'].required = False
self.fields['group_name'].required = False
class Meta:
model = Drummer
fields = ('first_name', 'last_name', 'date_of_birth', 'date_of_death',
'bio', 'photo', 'slug')
View:
class AddView(CreateView):
form_class = AddDrummerForm
success_url = reverse_lazy('drummers:home')
template_name = 'drummers/add_drummer.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = 'Adding drummer'
return context