2

これは私が説明するのが難しい質問ですが、ここで最善を尽くします。

カレンダーイベント用のモデルがあります:

class Event(models.Model):
    account = models.ForeignKey(Account, related_name="event_account")
    location = models.ForeignKey(Location, related_name="event_location")
    patient = models.ManyToManyField(Patient)
    datetime_start = models.DateTimeField()
    datetime_end = models.DateTimeField()
    last_update = models.DateTimeField(auto_now=False, auto_now_add=False, null=True, blank=True)
    event_series = models.ForeignKey(EventSeries, related_name="event_series", null=True, blank=True)
    is_original_event = models.BooleanField(default=True)

これが保存されると、save() メソッドをオーバーライドして、event_series (定期的なイベント) が設定されているかどうかを確認します。そうである場合は、定期的な日付ごとに別のイベント オブジェクトを繰り返し作成する必要があります。

最善のアプローチではないかもしれませんが、次の方法が機能しているようです。

def save(self,  *args, **kwargs):
    if self.pk is None:
        if self.event_series is not None and self.is_original_event is True :
            recurrence_rules = EventSeries.objects.get(pk=self.event_series.pk)

            rr_freq = DAILY                    
            if recurrence_rules.frequency == "DAILY":
                rr_freq = DAILY
            elif recurrence_rules.frequency == "WEEKLY":
                rr_freq = WEEKLY
            elif recurrence_rules.frequency == "MONTHLY":
                rr_freq = MONTHLY
            elif recurrence_rules.frequency == "YEARLY":
                rr_freq = YEARLY

            rlist = list(rrule(rr_freq, count=recurrence_rules.recurrences, dtstart=self.datetime_start))

            for revent in rlist:
                evnt = Event.objects.create(account = self.account, location = self.location, datetime_start = revent, datetime_end = revent, is_original_event = False, event_series = self.event_series)
                super(Event, evnt).save(*args, **kwargs)          

    super(Event, self).save(*args, **kwargs)

ただし、私が見つけた本当の問題は、この方法を使用して管理フォームから保存すると、定期的なイベントが作成されることですが、M2M フィールドである self.patient を取得しようとすると、次のエラーが発生し続けます。

'Event' instance needs to have a primary key value before a many-to-many relationship can be used

私の主な質問は、この m2m エラーに関するものですが、定期的なイベントのネストされた保存についてフィードバックがあれば、それも素晴らしいでしょう.

どうもありがとう!

4

1 に答える 1