2016-05-19 5 views
0

Django Actionsでジョブの総コストを計算しようとしていますが、そのジョブを完了したとマークし、Django - 特定のインスタンスに関連するリストのManytoManyを照会します

TypeError at /admin/donaldson_motors_appV2/job/ 
'Job' object is not iterable 

方法(admin.py内側):

def job_complete(self, request, queryset): 

     # Sets the date the job was complete to the time the email was sent. 
     date_complete = queryset.update(date_complete=datetime.datetime.now()) 

     total_cost = 0 
     for job in queryset: 
      job_items = Item.objects.get(job) 
      total_cost += job_items 
      total_cost += 50 
     queryset.update(total_cost=total_cost) 

     # Loops all the customers selected. 
     for job in queryset: 
      if job.vehicle.user.user.email: 
       send_mail("Donaldson Motors - Vehicle Pickup", # Subject 
          "Hello %s! Your vehicle (Registration Number: %s Manufacturer: %s Model: %s) " 
          "is ready to pick up now." % # Message 
          (job.vehicle.user.user.username, job.vehicle.reg_no, 
          job.vehicle.make, job.vehicle.model), # Wildcard fillers 
          "[email protected]", # From 
          [job.vehicle.user.user.email,]) # To 

     # Notifies Staff member email has been sent 
     self.message_user(request, "Vehicle is ready to pickup. User has been notified.") 
    job_complete.short_description = 'Job is Complete' 

モデル私の問題は、私が仕事で使用するとエラーを受け取るされている項目のコストを取得する問題を抱えていますということです。

class Item(models.Model): 
    # Item attributes 
    item_name = models.CharField(max_length=50) 
    cost = models.FloatField() 
    quantity = models.IntegerField() 

    # One Supplier can have many Items. 
    supplier = models.ForeignKey(Supplier) 

    def __str__(self): 
     return self.item_name 


class Job(models.Model): 

    # Many Item can be used in many Jobs. 
    item = models.ManyToManyField(Item) 
    # One Vehicle can have many Jobs. 
    vehicle = models.ForeignKey(Vehicle) 

    # Job attributes 
    job_desc = models.TextField() 
    date_booked = models.DateTimeField() 
    date_complete = models.DateField(null=True, blank=True) 
    total_cost = models.FloatField(null=True, blank=True) 

    def __str__(self): 
     return "%s, %s, %s" % (self.vehicle.reg_no, self.date_booked.time(), self.date_booked.date().isoformat()) 

要約すると、私の質問は、特定の仕事に関連する項目のリストにどのようにアクセスできますか?

答えて

0

あなたが好きなジョブオブジェクトのすべての項目のリストにアクセスすることができ、

items = job.item.all() 
+0

はどうもありがとうございました。なぜ私はそれを試みることを考えなかったのか分からない。 –

関連する問題