【问题标题】:How to assign items for loop inside a Model object with Django?如何使用 Django 在模型对象中为循环分配项目?
【发布时间】:2014-08-26 09:02:47
【问题描述】:

是否可以覆盖模型中的值?我得到“MyModel”对象不支持项目分配。

-- 模型.py

class Slider(models.Model):
   name = models.CharField(max_length=255)
   rows = models.SmallIntegerField(max_length=2)
   cat = models.ForeignKey(Products)
   order = models.SmallIntegerField()
   status = models.BooleanField(default=0)

---views.py

rows = Slider.objects.all().order_by('order')

for item in rows:
    product = Products.objects.filter(cat=item.cat)[:10]
    item['product'] = product
    print item

异常值:'Slider' 对象不支持项目分配

【问题讨论】:

  • 那个错误表明你没有在类上实现__getitem__。你可以做item.product = product,但恐怕他们都不会以任何方式改变数据库......
  • 是的,你想在你的模型中添加一个字段product = models.ForeignKey(Products)。然后你可以做item.product = product
  • 您说覆盖,但您的模型中没有值 product 可以覆盖?
  • 您要在数据库中为Slider 保留product 的值吗?还是只是暂时的?
  • 你到底想做什么?每个“滑块”都有同一类别的前十名产品?

标签: python django


【解决方案1】:

如果您想在数据库中为特定的Slider 持久化product 的值,则将ForeignKey 字段添加到Slider

class Slider(models.Model):
    ...
    product = models.ForeignKey(Products)

如果你想暂时存储,只需在Slider添加一个常规属性来保存它。

class Slider(models.Model):
    ...
    product = None

无论哪种情况,您都可以这样设置:

rows = Slider.objects.all().order_by('order')
for item in rows:
    item.product = ...

如果您愿意,您可以完全省略属性声明,但这意味着如果您去检查 item.product,而无需先设置它,您会得到一个 AttributeError

【讨论】:

    猜你喜欢
    • 2013-09-16
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 2020-08-07
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多