0
一個多到一的關係設置我有三種模式:資產,AssetTypes和服務。資產需要得到每ň個月服務,並與服務多到一的關係。定義Django的查詢與計算
class AssetType(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(verbose_name="Asset Type", max_length=100)
service_period = models.PositiveSmallIntegerField(verbose_name="Service Period (in months)", null=True, blank=True, default=12)
class Asset(models.Model):
id = models.AutoField(primary_key=True)
type = models.ForeignKey(AssetType, on_delete=models.PROTECT)
def service_period(self):
return AssetType.objects.get(pk=self.type.id).service_period
def service_history(self):
return self.service_set.all().order_by('-date')
def service_due_date(self):
if self.service_period()==None:
return None
elif self.service_history().count()==0:
return datetime.strptime('2017-01-01', '%Y-%m-%d').date()
else:
last_service_date = self.service_history().latest('date').date
return last_service_date + timedelta(self.service_period()*30)
def service_overdue(self):
return ((self.service_due_date()!=None) and self.service_due_date() < date.today())
class Service(models.Model):
id = models.AutoField(primary_key=True)
date = models.DateField()
asset = models.ForeignKey(Asset, on_delete=models.CASCADE)
我試圖找出如何使查詢集將返回逾期爲他們服務的資產的列表。我覺得使用模型方法是一種紅鯡魚,並且我最好定義一個查詢集過濾器?
我需要逾期資產的列表是一個查詢中設置這樣我就可以用它來進一步查詢設置過濾器。
任何援助將不勝感激!
你的問題不清楚;你的模型都沒有與其他模型有任何關係。請編輯以添加關係字段。什麼是'Asset.service_due_date()'? –
我不好,錯過了服務類的最後一行(其中關鍵的是有外鍵)和其它方法。 – Majoch