Передача иностранного ключа на страницу и получение данных
У меня есть страница, которая в основном отображает введенные пользователем данные на основе проекта. Начальная страница содержит всего несколько полей, одно из которых project_name
, которое я установил как unique
project_name = models.CharField(max_length=50, blank=False, unique=True)
С этой страницы я хочу открыть другую страницу, основанную на project_name
, которая позволяет добавлять дополнительные детали и хранить их в другой модели.
Models.py
class Project(models.Model):
project_name = models.CharField(max_length=50, blank=False, unique=True)
project_website = models.URLField(max_length=50, blank=True)
project_description = models.TextField(blank=True)
ckeditor_classic = models.TextField(blank=True)
def __str__(self):
return str(self.project_name)
class Fundamentals(models.Model):
project_name = models.ForeignKey(Project, to_field='project_name', on_delete=models.CASCADE)
project_website = models.URLField(max_length=100, blank=True)
project_roadmap = models.CharField(max_length=25)
def __str__(self):
return str(self.project_name)
Я пытаюсь сделать следующее: загрузить вторую страницу, но отобразить project_name
и иметь возможность связать следующий набор данных с project
Я думаю, что мне нужно сделать это через views
и urls
, но я не могу заставить это работать.
View.py
@login_required
def AddFundamentals(request,project_id):
project = Project.objects.get(pk=project_id)
form = AddFundamentalsForm(request.POST or None, instance=project)
if form.is_valid():
form.save()
return redirect('dahsboard.html')
return render(request, 'pages/critical_fundementals.html', {'project': project, "form": form})
Возвращенная ошибка - это
AddFundamentals() missing 1 required positional argument: 'project_id'
но я передаю это через URL
path('fundanmentals/<project_id>', view=AddFundamentals, name="add_fundamentals"),
Нужно ли мне сделать что-то еще в представлении, чтобы вернуть данные на основе PK? Я действительно борюсь с этим :(
)Спасибо @Hills.
Это решило мою проблему path('fundamentals/<int:project_id>/'
Пришлось убрать трелинг /
и все ожило :)
Спасибо всем.