Django模板按“不相关”模型的字段排序

     2023-02-24     231

关键词:

【中文标题】Django模板按“不相关”模型的字段排序【英文标题】:Django template sort by 'unrelated' model's field 【发布时间】:2015-02-18 10:20:28 【问题描述】:

我正在尝试通过模型中的一个字段对模板中的相关项目进行排序,这三个 ForeignKey 关系相距甚远。我正在按照另一个 *** 答案中的建议在视图中组装模板的数据:

Sorting related items in a Django template

据我所知,我照原样复制了代码,除了我必须更改变量名称。它不会抛出错误,只是在 HTML 无序列表中不显示任何列表项。

# checkout.html

% for item in cart_items %
    <tr>
        <td class="left">
         item.name 
        <ul>
        % for part in part_list %
            <li> part.name 
        % endfor %
        </ul></td>
    </tr>
% endfor %

还有景色……

# views.py

def checkout(request):
    cart_items = get_cart_items(request)

    itemCollection = []   
    for item in cart_items:
       item.part_list = item.product.buildpart.all().order_by('product__family__type')
       itemCollection.append(item)

    return render(request, 'checkout.html', locals())

还有 get_cart_items 函数:

# cart.py

def get_cart_items(request):
    """ return all items from the current user's cart """
    return CartItem.objects.filter(cart_id=get_cart_id(request))

正如我所说,模板和视图几乎是上述 *** 文章中提出的解决方案的副本。我觉得很好奇的一件事是视图中的 itemCollection[] 从未在模板中引用。

我相信 order_by 子句 ('product__family__type') 是正确的,只是因为它不会产生错误。但如果这是问题或其中的一部分,我试图在该 order_by 子句中导航的模型链:

我们从购物车模型(CartItem)开始:

class Item(models.Model):
    cart_id = models.CharField(max_length=50)
    quantity = models.IntegerField(default=1)
    product = models.ForeignKey(PartModel, unique=False)

    class Meta:
        abstract = True

class CartItem(Item):
    date_added = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['date_added']
        verbose_name = "Cart Item"

通过“产品”字段,我们可以看到保存库存的模型及其自引用的 BuildPart ManyToMany 模型:

class PartModel(models.Model):
    family = models.ForeignKey(PartFamily)
    name = models.CharField("Model Name", max_length=50, unique=True)
    buildpart = models.ManyToManyField('self', through='BuildPart',
                                symmetrical=False, related_name='+')

class Build(models.Model):
    build = models.ForeignKey(PartModel, related_name='+')
    part = models.ForeignKey(PartModel, related_name='+')
    quantity = models.PositiveSmallIntegerField(default=1)

    class Meta:
        abstract = True
        unique_together = ('build', 'part')

    def __unicode__(self):
        return self.build.name + ' with ' + str(self.quantity) + ' * ' + \
               self.part.family.make.name + ' ' + self.part.name

class BuildPart(Build):
    pass

    class Meta:
        verbose_name = "Build Part"

从那里我们遵循“家庭”字段到 PartFamily 模型:

class PartFamily(models.Model):
    make = models.ForeignKey(PartMake)
    type = models.ForeignKey(PartType)
    name = models.CharField("Family Name", max_length=30,
                             unique=True)
    slug = models.SlugField(unique=True)

最后,我们使用“订单”字段进入模型,我们希望通过 PartType 对相关项目进行排序:

class PartType(models.Model):
    name = models.CharField("Part Type", max_length=30, unique=True)
    slug = models.SlugField(unique=True)
    order = models.PositiveSmallIntegerField()
    description = models.TextField(blank=True, null=True)

回顾一下,我如何获取购物车产品的相关商品,并按 PartType 模型中的“订单”字段对其进行排序?

【问题讨论】:

【参考方案1】:

模板中有两个错误。

首先,您已将具有排序关系的项目放在名为itemCollection 的列表中,但在模板中您将迭代cart_item。这是一个很好的例子,说明为什么你应该明确传递给模板的变量,而不是依赖于locals()

其次,您然后迭代 part_list 而不定义它。你的意思是item.part_list

【讨论】:

在 django 中按模型字段的子字符串对对象进行排序

】在django中按模型字段的子字符串对对象进行排序【英文标题】:Sortobjectsbyasubstringofamodelfieldindjango【发布时间】:2019-07-3011:16:37【问题描述】:我试图找到最佳解决方案来对我的数据库中的所有Machine对象进行排序并找到最后使... 查看详情

如何在 Django 中按计算字段复杂排序?

】如何在Django中按计算字段复杂排序?【英文标题】:HowcaniorderbyacalculatedfieldcomplexinDjango?【发布时间】:2011-07-0601:05:37【问题描述】:我有一个这样的模型:classProgram(models.Model):votes_sum=models.IntegerField(max_length=10,default=0)voters_coun... 查看详情

django - 聚合 json 字段特定键并按聚合排序

】django-聚合json字段特定键并按聚合排序【英文标题】:django-aggregatejsonfieldspecifickeysandorderbytheaggregation【发布时间】:2017-12-3107:14:45【问题描述】:我有一个模型,其字段为data,类型为JSONField,来自django.contrib.postgres.fields。json... 查看详情

Django - 如何按多个字段对多个对象进行排序/排序?

】Django-如何按多个字段对多个对象进行排序/排序?【英文标题】:Django-howtosort/ordermultipleobjectsbymultiplefields?【发布时间】:2021-11-0520:37:40【问题描述】:我想在我的网站上显示一张音乐专辑,问题是专辑本身有两张光盘,每张... 查看详情

来自 Django 中两个不直接相关的模型的内部连接

】来自Django中两个不直接相关的模型的内部连接【英文标题】:InnerjoinfromtwonotdirectlyrelatedmodelsinDjango【发布时间】:2011-09-2919:42:26【问题描述】:假设我有这样的模型(为清楚起见,删除了所有不相关的字段):A(Model):someFields=.... 查看详情

Django按两个字段排序项目,但如果它们为零则忽略它们

】Django按两个字段排序项目,但如果它们为零则忽略它们【英文标题】:Djangoorderitemsbytwofields,butignoringthemifthey\'rezero【发布时间】:2011-08-2511:11:26【问题描述】:我有以下模型(为了这个问题的目的大大简化了):classProduct(model... 查看详情

django:为啥在模板中获取模型的 .id 字段很慢?

】django:为啥在模板中获取模型的.id字段很慢?【英文标题】:django:whyisgettingmodel\'s.idfieldintemplateslow?django:为什么在模板中获取模型的.id字段很慢?【发布时间】:2011-11-1803:18:50【问题描述】:我有一个模板,它最终会输出大... 查看详情

在 Django 模板中格式良好的缺失值的模型字段列表

】在Django模板中格式良好的缺失值的模型字段列表【英文标题】:ListofmodelfieldswithmissingvaluesnicelyformattedinDjangotemplate【发布时间】:2020-01-2121:48:51【问题描述】:我正在尝试在Django中创建一个视图,以列出模型中的每个条目以及... 查看详情

如何按计算属性的总和对 Django 模型进行排序?

】如何按计算属性的总和对Django模型进行排序?【英文标题】:HowdoIsortDjangomodelsbysumofcalculatedproperty?【发布时间】:2018-10-1520:09:18【问题描述】:我有两个模型,Project和Session。一个项目有很多会话,一个用户有很多项目:classPr... 查看详情

Django 按计算字段排序

】Django按计算字段排序【英文标题】:DjangoSortByCalculatedField【发布时间】:2010-02-1619:09:48【问题描述】:使用来自thisSOpost的距离逻辑,我将使用以下代码返回一组经过适当过滤的对象:classLocationManager(models.Manager):defnearby_locations... 查看详情

从与模板中的 django 用户关联的模型中访问字段

】从与模板中的django用户关联的模型中访问字段【英文标题】:Accessingfieldsfromanmodelassociatedtoadjangouserintemplate【发布时间】:2017-10-0403:50:07【问题描述】:我有一个模型User_Details与每个Django用户关联。它有一个名为mobile_number的字... 查看详情

如何从模板标签中的模型对象中获取 django 模型字段值

】如何从模板标签中的模型对象中获取django模型字段值【英文标题】:Howtogetdjangomodelsfieldvaluefrommodelobjectintemplatetags【发布时间】:2011-10-0709:20:53【问题描述】:Models.py:classDiscussion(models.Model):version=models.TextField(blank=True)team=model... 查看详情

django - 切片后重新排序查询集

】django-切片后重新排序查询集【英文标题】:django-reorderquerysetafterslicingit【发布时间】:2010-10-3015:44:46【问题描述】:我从一个按日期时间字段排序的Foo模型中获取最新的5行。qs=Foo.objects.all()[:5]在接下来的步骤中,我想通过其... 查看详情

Django模板:从模型查询集对象中提取字段

】Django模板:从模型查询集对象中提取字段【英文标题】:Djangotemplate:Extractfieldfrommodelquerysetobject【发布时间】:2016-12-1813:25:30【问题描述】:在Django模板中,我使用以下方法获取最新评论:blog.comments.all|dictsort:"created_at"|last其... 查看详情

Django 1.6 无法在模板中显示来自模型的多对多字段

】Django1.6无法在模板中显示来自模型的多对多字段【英文标题】:Django1.6Cantdisplayamanytomanyfieldfrommodelsintemplate【发布时间】:2014-07-2821:12:05【问题描述】:我正在尝试在模板中显示来自医生模型的多对多字段。每个医生都有不止... 查看详情

Django 按日期排序,但最后有“无”?

】Django按日期排序,但最后有“无”?【英文标题】:DjangoOrderByDate,buthave"None"atend?【发布时间】:2011-12-0615:30:09【问题描述】:我有一个工作订单模型,其中包含一个工作订单何时需要的字段。为了获得一份工单清单,... 查看详情

如何按日期汇总 Django 模型字段并根据当前月份和年份显示总计

】如何按日期汇总Django模型字段并根据当前月份和年份显示总计【英文标题】:HowCanISumDjangoModelsFieldbyDatesandDisplayTotalsbaseonCurrentMonthandYear【发布时间】:2021-10-2208:56:33【问题描述】:我是pythonDjango框架的新手,我希望有人能帮助... 查看详情

模型字段类型从 CharField 更改为 ForeignKey 时 Django 模板损坏

】模型字段类型从CharField更改为ForeignKey时Django模板损坏【英文标题】:DjangoTemplateBrokeWhenModelFieldTypeChangedFromCharFieldtoForeignKey【发布时间】:2021-04-2019:07:20【问题描述】:我有一组模板,它们都以相同的object_list开头。第一个(revie... 查看详情