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
输出如下:
董事会:IT问题:
1)旧服务器
2)没有UPC
3)静电放电
我制作了一个基于类的视图来生成Board。我的想法是,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
,以便它可以通过这种方式创建适当对象的列表?
答案 0 :(得分:-1)
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
就是答案。