Две вещи, которые ставят меня в тупик в Django: 1. Как получить доступ к родительским полям в дочерней модели, которая имеет отношение один-ко-многим родитель / потомок, и 2. Как мне установить значение по умолчанию в форме CreateView, чтобы быть равным параметру url.
Что касается первого вопроса, я превратил дочерние поля во внешние ключи для доступа к родительскому полю, но я предполагаю, что есть более чистый способ сделать это.
Код для части 2 Вопроса
models.py
class Parent(models.Model):
parent_name = models.CharField(unique=True, max_length=40)
parent_slug = models.SlugField(unique=True)
class Child(models.Model):
child_name = models.CharField(unique=True, max_length=40)
child_slug models.SlugField(unique=True)
parent_name = models.ForeignKey(Parent, on_delete=models.CASCADE)
urls.py
urlpatterns = [
...
path('<parent_slug>/children/', ChildListView.as_view(), name='child_list'),
...
]
views.py
class ChildCreateView(CreateView):
model = Child
form_class = NewBranchForm
template_name = 'child_new.html'
def form_valid(self, form):
form.instance.parent_slug = self.kwargs['parent_slug']
return super(ChildCreateView, self).form_valid(form)
forms.py
class NewChildForm(forms.ModelForm):
class Meta:
model = Child
fields = ['child_name']