Есть ли какой-нибудь способ улучшить мое приложение для фитнес-сервисов? [закрыто]
Я все еще новичок в программировании (я постепенно осваивал его в свободное время и думаю, что у меня неплохо получается), но был бы очень признателен за любые отзывы о функциональности моей формы, поскольку это именно то, что я пытался сделать в последнее время . Я хотел бы знать, могу ли я что-нибудь сделать для улучшения своего кода - от оптимизации до повышения профессионализма.
Спасибо.
forms.py
class ConsultationForm(forms.ModelForm):
class Meta:
model = Consultation
fields = ['address_line_1', 'address_line_2', 'postcode', 'description', 'date']
widgets = {
'date': forms.DateInput(attrs={'type': 'date'}),
'description': forms.Textarea(attrs={'rows': 4})
}
class SessionForm(forms.ModelForm):
consultation = forms.ModelChoiceField(
queryset=Consultation.objects.all(),
empty_label="Select a consultation",
help_text="Please select a previous consultation",
required=True
)
class Meta:
model = Session
fields = ['consultation', 'workout', 'date']
widgets = {
'date': forms.DateInput(attrs={'type': 'date'}),
}
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
super().__init__(*args, **kwargs)
if user:
self.fields['consultation'].queryset = Consultation.objects.filter(user=user)
class CheckInForm(forms.ModelForm):
session = forms.ModelChoiceField(
queryset=Session.objects.all(),
empty_label="Select an session",
help_text="Please select a previous session",
required=True
)
class Meta:
model = CheckIn
fields = ['session', 'date']
widgets = {
'date': forms.DateInput(attrs={'type': 'date'}),
}
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
super().__init__(*args, **kwargs)
if user:
self.fields['session'].queryset = Session.objects.filter(user=user)
views.py
@login_required
def booking_form(request, service_type):
SERVICE_MAP = {
'consultation': {'form': ConsultationForm, 'model': Consultation},
'session': {'form': SessionForm, 'model': Session},
'checkin': {'form': CheckInForm, 'model': CheckIn}
}
if service_type not in SERVICE_MAP:
return redirect('services')
service_info = SERVICE_MAP[service_type]
FormClass = service_info['form']
ModelClass = service_info['model']
if request.method == 'POST':
if service_type in ['session', 'checkin']:
form = FormClass(request.POST, user=request.user)
else:
form = FormClass(request.POST)
if form.is_valid():
booking = form.save(commit=False)
booking.user = request.user
booking.save()
return redirect('profile')
else:
if service_type in ['session', 'checkin']:
form = FormClass(user=request.user)
else:
form = FormClass()
return render(request, 'booking_form.html', {
'form': form,
'service_type': service_type
})
def services(request):
return render(request, 'services.html')
booking_form.html
dashboard.html
<div class="dashboard">
<h2>Dashboard</h2>
<div class="card">
<h3>Upcoming Consultation</h3>
{% with consultation=user.consultation_set.all|dictsort:"date"|first %}
{% if consultation %}
<ul>
<li>On {{ consultation.date }} with {{ consultation.user.username }}</li>
<li>Address: {{ consultation.address_line_1 }} {{ consultation.address_line_2 }}</li>
<li>Postcode: {{ consultation.postcode }}</li>
<li>Description: {{ consultation.description }}</li>
</ul>
{% else %}
<p>You have no upcoming consultations</p>
{% endif %}
{% endwith %}
</div>
<div class="card">
<h3>Upcoming session</h3>
{% with session=user.session_set.all|dictsort:"date"|first %}
{% if session %}
<ul>
<li>{{ session.workout }} on {{ session.date }}</li>
</ul>
{% else %}
<p>You have no upcoming sessions</p>
{% endif %}
{% endwith %}
</div>
<div class="card">
<h3>Upcoming Check Ins</h3>
{% with checkin=user.checkin_set.all|dictsort:"date"|first %}
{% if checkin %}
<ul>
<li>{{ checkin.date }} for {{ checkin.workout }}</li>
</ul>
{% else %}
<p>You have no upcoming check ins</p>
{% endif %}
{% endwith %}
</div>
</div>