0
私は、アセット、アセットタイプ、サービスという3つのモデルを持っています。資産はnの月ごとにサービスを受ける必要があり、サービスと多対1の関係にあります。計算と多対1の関係を持つ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