Сохранить поле id с ассоциированным пользователем в Django
class Drummer(models.Model):
first_name = models.CharField(max_length=32, verbose_name='Имя')
last_name = models.CharField(max_length=32, verbose_name='Фамилия')
date_of_birth = models.DateField(verbose_name='Дата рождения', blank=True, null=True)
date_of_death = models.DateField(verbose_name='Дата смерти',
blank=True, null=True, default=None)
bio = models.TextField(verbose_name='Информация')
photo = models.ImageField(upload_to='images', null=True, verbose_name='Фотография')
slug = models.SlugField(max_length=250, db_index=True, null=True, unique=True, verbose_name='URL')
group_name = models.ManyToManyField('Group', verbose_name='Группа')
users_drummer = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True
У меня есть модель Drummer, которую я описал выше ☝️ с полем
users_drummer = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
В шаблоне я позволяю пользователю редактировать только те записи, которые создавались конкретным пользователем.
{% if request.user.id == person.users_drummer.pk %}
редактировать
Проблема в том, что когда я сохраняю форму от пользователя, то поле
users_drummer сохраняет в базу данных пустое поле (null), а мне нужно, чтобы когда пользователь вводил все поля формы в базу данных, поле users_drummer сохранялось с ассоциированным с пользователем (user_id). Поле users_drummer я не вывожу в форме, потому что это поле пользователь не должен видеть. Как мне сделать так, чтобы при заполнении пользователем формы, она сохранялась в базу данных с полем users_drummer ассоциированным с конкретным пользователем?
Форма:
class AddDrummerForm(forms.ModelForm):
class Meta:
model = Drummer
fields = ('first_name', 'last_name', 'date_of_birth', 'date_of_death',
'bio', 'photo', 'slug')
если я правильно понял суть задачи, то можно либо через переопределение метода save() формы:
class AddDrummerForm(forms.ModelForm):
def save(self, request, commit=True):
drummer = super().save(commit=False)
drummer.users_drummer = request.user
if commit:
drummer.save()
return drummer
class Meta:
model = Drummer
fields = ('first_name', 'last_name',
'date_of_birth', 'date_of_death',
'bio', 'photo', 'slug')
либо создать скрытое поле формы users_drummer и в шаблоне уже присвоить ему нужное значение