Я создаю систему представления расходов, которая является многопользовательской.Для целей этого вопроса есть две модели: Claim
и Journey
.Пользователь создает заявку, и каждая заявка может иметь несколько поездок.
В журнале CreateView
следующий код:
- Автозаполняет раскрывающуюся форму заявки, для которой регистрируется поездка.на основе заявления pk, переданного в URL.
- На основе зарегистрированного пользователя отображаются только заявки для этого пользователя (в раскрывающемся списке)
- Устанавливает атрибут HTML для
<input>
;type=date
отображает селектор даты, а min='2018-09-10'
указывает запрещенный диапазон дат:
![date with allowable range](https://i.stack.imgur.com/8gotF.png)
В следующем представлении я вычисляюминимальная и максимальная даты, которые правильно выводятся при проверке работоспособности:
class JourneyCreateView(CreateView):
model = Journey
form_class = JourneyForm
def get_initial(self):
try:
# Calculate date limit for the date picker
min = Claim.objects.get(id=self.kwargs['claim']).week_commencing
max = min + timedelta(days=7)
# Obtain the claim ID from the URL
claim = self.kwargs['claim']
# Sanity check
print (claim, min, max)
return {'claim': claim, 'min':min, 'max':max}
except Exception as ex:
print (ex)
return {}
def get_form_kwargs(self, *args, **kwargs):
# Only show claims owned by the logged in user in the claim dropdown
kwargs = super().get_form_kwargs(*args, **kwargs)
kwargs['alloweduser'] = self.request.user.id
return kwargs
и форма:
class JourneyForm(forms.ModelForm):
# set html attribs which will apply to the form.
date = forms.CharField(widget=forms.TextInput(attrs={'type':'date',
'min':'2018-09-10'
}))
class Meta:
model = Journey
fields = ['date', 'distance','claim']
def __init__(self,alloweduser,*args,**kwargs):
# Make sure only to display the user's own claims.
super (JourneyForm,self ).__init__(*args,**kwargs)
self.fields['claim'].queryset = Claim.objects.filter(tech_id=alloweduser)
В этом коде claim
также возвращается get_initial()
иправильно предварительно заполняет раскрывающийся список претензий текущей претензией:
return {'claim': claim, 'min':min, 'max':max}
Однако меня смущает то, как я обращаюсь к переменным min
и max
, возвращаемым get_initial()
в третья строка формы, чтобы заменить строку ручного теста.