[英]Beautifulsoup: Soupy runny xml, single loop iterate through each item
[英]Iterate through groups, then loop item by item
Django 1.11.4
PostgreSQL 9.6.3
下面是一個書簽模型。
class Bookmark(CommonUrlMethodsMixin,
models.Model):
memo = models.CharField(max_length=200,
null=False,
blank=True,
default="") # Intentionally blank.
# For displaying in ModelForm.
content_type = models.ForeignKey(ContentType)
content_type_for_filter = models.CharField(max_length=6,
null=False,
blank=True,
default="")
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
user = models.ForeignKey(User,
on_delete=models.CASCADE)
def __str__(self):
return "{}: {} {}".format(self.content_object._meta.verbose_name.title(), self.content_object, self.memo)
class Meta:
verbose_name = _("bookmark")
在我的項目中,帶有書簽的可以是框架,項目,工作表。 因此,我在書簽模型content_type_for_filter中組織了一個特殊字段。 它可以包含“框架”,“項目”或“工作表”。
書簽必須按組顯示:首先是框架的書簽,然后是項的書簽,最后是圖紙:
Frames
bookmark 1
bookmark 2
bookmark 3
Sheets
bookmark 4
bookmark 5
Items
bookmark 6
bookmark 7
bookmark 8
然后,在個人區域中,我想顯示書簽。 現在在視圖中,我有:
def get_context_data(self, **kwargs):
bookmarks = user.bookmark_set.all()
# context['bookmarks'] = bookmarks
看來我的代碼不可接受。 看:我將不得不以某種方式在Python中處理書簽。 使用命名的元組之類的東西。 或至少三個列表列表。
我想我從數據庫中選擇的不是最佳的。 假設可以按“ content_type_for_filter”分組。 然后循環瀏覽組。 然后循環瀏覽組的內容。 但是我不知道如何。
您能幫我理解該怎么做嗎? ORM有可能嗎? 如果沒有,那么在沒有ORM的情況下該怎么做?
我的建議是,您進一步過濾書簽queryset並將其放在dict或另一個更適合您需要的類中:
bookmarks = user.bookmark_set.all()
from collections import OrderedDict as odict
groups = odict()
for group in ['Frames', 'Sheets', 'Itens']:
groups[group] = bookmarks.filter(content_type_for_filter=group)
context['groups'] = groups
一個更高級的選項可能是聚合您的查詢集 。 AFAIK,它僅將值和/或注釋分組,但是我可能是錯的。
首先,您需要定義一個上下文:
def get_context_data(self, **kwargs): context = super(<YOUR VIEW NAME>, self).get_context_data(**kwargs)
然后,似乎您沒有定義用戶。
您可以定義如下
# current user context['bookmarks'] = self.request.user.bookmark_set.all() # using an user specified in kwargs user = get_object_or_404(User, kwargs.get('user_pk')) # or, if your view is a DetailView of User user = self.get_object() # then, finally context['bookmarks'] = Bookmarks.objects.filter(user=user)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.