Я работаю над проектом Django с двумя моделями, связанными ForeignKey
. Родительская модель Composition
связана с дочерней моделью NoteObject
с помощью id
из Composition
.
в models.py
class Composition(models.Model):
id = models.AutoField(primary_key=True)
...
class NoteObject(models.Model):
id = models.AutoField(primary_key=True)
composition = models.ForeignKey(Composition, on_delete=models.CASCADE)
...
Однажды Композиция создана, пользователь должен иметь возможность создавать NoteObjects
, которые принадлежат этой композиции. Ноты создаются следующим способом:
in views.py
class NoteCreateView(CreateView):
model = NoteObject
template_name = 'entry.html'
fields = ['duration', 'pitch', 'accidental', 'octave']
success_url = reverse_lazy('compositions')
def get_context_data(self, **kwargs):
kwargs['notes'] = NoteObject.objects.filter(
composition=self.kwargs['composition'])
return super(NoteCreateView, self).get_context_data(**kwargs)
Метод get_context_data
предназначен для отображения только нот для текущей композиции. Текущая композиция получается из id
композиции, являющейся частью URL, где <composition>
- идентификатор композиции.
в urls.py
path('entry/<composition>/', views.NoteCreateView.as_view(), name='entry')
Когда я сохраните NoteObject
, что мне нужно сделать, чтобы установить значение ForeignKey
равным <composition>
?
в models.py
def save(self, *args, **kwargs):
composition_id = ????????
self.composition_id = composition_id
super(NoteObject, self).save(*args, **kwargs)
Как мне получить значение kwarg
в CreateView
равным ForeignKey
при создании объекта?