class Board(models.Model):
author = models.ForeignKey(User, unique=False, on_delete=models.CASCADE)
create_date = models.DateField(auto_now=False, auto_now_add=True)
def __str__(self):
return F'{self.author.username} {self.create_date} {self.pk}'
class Problem(models.Model):
board = models.ForeignKey(Board, unique=False, on_delete=models.CASCADE)
problem = models.TextField()
def __str__(self):
return self.problem[:30]
def get_absolute_url(self):
return
Идея заключается в том, что у меня есть Совет, а затем несколько связанных с ним проблем.
Я хочу создать шаблон classView + для детализации одной доски. как /board/187
Результат будет выглядеть так:
СОВЕТ: Проблемы с ИТ проблемами:
1) Старые серверы
2) Нет СКП
3) Статические выбросы
Я создал классный подход для создания Правления. Моя идея состояла в том, что у board_detail.html был бы тег {{ include "board/_problem.html" }}
, который затем использовал бы производную ListView
для перечисления всей Problem
связанной с этим Board
.
Я не очень ясно понял, как это сделать. Я думал, что могу использовать SelectRelatedMixin
в классе "Проблема", чтобы затем я мог получить доступ к полям в шаблоне, что-то вроде for problem in board.problems
. Но это, похоже, не работает. (SelectRelatedMixin
происходит из django-braces)
Я туман на том, как эта работа должна быть объединена. На самом деле, я даже не уверен, как это сделать с помощью исходного select_related()
. Думаю, я должен был бы знать, как это сделать с реальностью, чтобы иметь полное понимание.
Вот два cbv, которые я сделал в своей попытке.
class Problem(models.Model):
board = models.ForeignKey(Board, unique=False, on_delete=models.CASCADE)
problem = models.TextField()
def __str__(self):
return self.problem[:30]
def get_absolute_url(self):
return
class BoardUpdateView(SelectRelatedMixin, UpdateView):
model = Board
fields = ['author']
select_related = (Problem,)
def get_object(self, queryset=None):
if "pk" not in self.kwargs:
self.kwargs['pk'] = None
obj, created = Board.objects.get_or_create(pk=self.kwargs['pk'],
defaults={'author': self.request.user})
return obj
Но, возможно, это совершенно неправильный подход. Вместо этого, возможно, я должен каким-то образом передать Board.pk
включенному ProblemList.html
чтобы он мог генерировать список соответствующих объектов таким образом?
def get_context_data (self, ** kwargs): context = super (CompleteView, self).get_context_data (** kwargs)
board = self.get_object()
# print(F"problem is what? {problem}")
context['problems'] = board.problem_set.all().order_by('pk')
return context
get_object()
внутри get_context_data
.