1 回答

TA貢獻1842條經(jīng)驗 獲得超21個贊
在您看來,您應(yīng)該傳遞用戶的主鍵,因此:
? ? def get_form_kwargs(self, *args, **kwargs):
? ? ? ? kwargs = super(CalendarEventAdd, self).get_form_kwargs()
? ? ? ? kwargs['user_id'] = self.request.user.pk
? ? ? ? return kwargs
您可以將其保存在EventForm對象中:
class EventForm(forms.ModelForm):
? ??
? ? def __init__(self, *args, user_id=None, **kwargs):? ?
? ? ? ? super(EventForm, self).__init__(*args, **kwargs)
? ? ? ? self.user_id = user_id
? ? ? ? # input_formats parses HTML5 datetime-local input to datetime field
? ? ? ? self.fields['start_time'].input_formats = ('%Y-%m-%dT%H:%M',)
? ? ? ? self.fields['end_time'].input_formats = ('%Y-%m-%dT%H:%M',)
? ??
? ??
? ? def clean(self, *args, **kwargs):
? ? ? ? form_start_time = self.cleaned_data.get('start_time')
? ? ? ? form_end_time = self.cleaned_data.get('end_time')
? ? ? ? form_manage_id = self.cleaned_data.get('manage_id')
? ? ? ? between = Event.objects.exclude(pk=self.instance.pk).filter(
? ? ? ? ? ? manage_id=self.user_id,
? ? ? ? ? ? end_time__gte=form_start_time,
? ? ? ? ? ? start_time__lte=form_end_time
? ? ? ? )
? ? ? ? if between.exists():
? ? ? ? ? ? raise forms.ValidationError('Already Calendar entry for this time')
? ? ? ? return super().clean()
如果您稍后決定不僅使用 來創(chuàng)建.exclude(pk=self.instance.pk)對象,還使用來更新對象,則 將會排除您正在編輯的對象。EventFormEvent
注意:文檔建議使用AUTH_USER_MODEL
設(shè)置 [Django-doc]而不是?get_user_model()
[Django-doc]。這更安全,因為如果身份驗證應(yīng)用程序尚未加載,設(shè)置仍然可以指定模型的名稱。因此最好這樣寫:
from django.conf import settings
class Event(models.Model):
? ? # …
? ? manage = models.ForeignKey(
? ? ? ? settings.AUTH_USER_MODEL,
? ? ? ? on_delete=models.CASCADE
? ? )
添加回答
舉報