使用下面的代码,执行set_instance.items.add()
时如何让SetMeta.order默认为len(set.items.all())
我已经尝试过在setMeta上使用save(),但是执行add()时不会调用save。还尝试过使用SetMeta作为发送者的信号,但是SetMeta发送Set实例而不是SetMeta实例。似乎应该很简单,但我无法弄清楚。
最终,item
中的每个set
应该具有等于order
的{{1}}
models.py
len(set_instance.items.all()
更新。也可以将class Item(models.Model, AdminVideoMixin):
title = models.TextField(max_length=5000)
**** LOTS OF OTHER FIELDS ****
class Set(Item):
front_page = models.BooleanField(max_length=300, blank=False, default=False, null=False)
items = models.ManyToManyField(Item, related_name='in_sets', through='SetMeta', max_length=5000,)
class SetMeta(models.Model):
item = models.ForeignKey(Item, on_delete=models.CASCADE, related_name='itemOrder', max_length=5000, )
set = models.ForeignKey(Set, on_delete=models.CASCADE, related_name='setOrder', max_length=5000,)
order = models.IntegerField(default=0, null=True,)
设置为set.items.count()
答案 0 :(得分:1)
根据documentation
,您可以使用以下任一解决方案:
一个,请使用var children = null
chidren.map(i => {return i}) // => VM370:1 Uncaught TypeError: Cannot read property 'map' of null
React.Children.map(children, i => {return i;}) // return null
模型:
through
两个,使用item = Item.objects.first()
set = Set.objects.first()
icount = set.items.count() + 1
SetItem.objects.create(item=item, set=set, order=icount)
:
through_defaults
仅供参考,(根据您的“更新”部分),对于您的情况,您无需将订单存储在直通模型中。您可以添加属性方法以查看数据:
item = Item.objects.first()
set = Set.objects.first()
icount = set.items.count() + 1
set.items.add(item, through_defaults={'order':icount})