【问题标题】:django - adding a counter for every ManyToMany field addeddjango - 为添加的每个 ManyToMany 字段添加一个计数器
【发布时间】:2012-11-01 10:41:02
【问题描述】:

我有这些模型:

#model.py

class Subject(models.Model):
    name = models.CharField("Name",max_length=50, blank=True)
    ...
    ...

class Activity(models.Model):
    label = models.CharField("Act. name",max_length=150)
    price = models.DecimalField("price", max_digits=10, decimal_places=2,default=0)
    count = models.IntegerField("Count", default=0)

    def __unicode__(self):
        return u"%s" % (self.label)
    class Meta:
        verbose_name_plural = "Activities"


class Invoice(models.Model):
    subject = models.ForeignKey(Subject)
    date = models.DateField(default=date.today())
    activities = models.ManyToManyField(Activity)
    ....
    ....

在管理员上创建新的发票实例时,我可以选择多对多字段“活动”,但我希望有一个额外的计数器(例如 IntegerField)作为发票字段来计算和保存数量添加到我的 Invoice 实例中的每个活动。这可能吗?

谢谢,

卢克

【问题讨论】:

    标签: django django-models django-admin many-to-many relationship


    【解决方案1】:

    您可以在模型上有一个字段并覆盖保存方法

    class Invoice(models.Model):
        subject = models.ForeignKey(Subject)
        date = models.DateField(default=date.today())
        activities = models.ManyToManyField(Activity)
        activity_count = models.PositiveIntegerField(default=0)
        def save(self):
           self.activity_count = self.activities.count()
           super(Invoice, self).save()
    

    【讨论】:

    • 这不是我需要的:假设对于 Invoice 实例,我将两个活动添加为 m2m 字段。现在对于他们中的每一个,我需要一个计数器,而不是向该实例添加多少 m2m 字段的总计数器。
    • 您究竟想为每个活动计算什么?
    • 对于添加到 Invoice 实例的每个“活动”,我需要计算该活动的数量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多