Я хочу иметь возможность обновлять записи в профиле таблицы пользовательского приложения Favorites_Subjects и Favour_Courses из формы внутри моего приложения для участников. Это позволит затем значениям {{user.profile.favorite_subjects}} и {{user.profile.favorite_courses}} измениться в моем шаблоне после отправки формы.
Я не уверен, как это сделать, и использовать ли переменную экземпляра где-либо в представлении. Также не знаете, как заполнить форму текущими значениями favour_courses и Favourites_subjects.
User app - models.py Profile table:
class Profile(models.Model):
user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE)
favorite_subjects = models.CharField(max_length=20, unique=True)
favorite_courses = models.CharField(max_length=20, unique=True)
def __str__(self):
return self.user.username
---------------
Memberships app - memberships/profile.html:
{{ user.profile.favorite_subjects }}
{{ user.profile.favorite_courses }}
<a href="{% url 'memberships:interest_view' %}">Change Interests</a>
---------------
Memberships app Urls.py:
from .views import (
interest_view
)
path('interest_view/', interest_view, name='interest_view'),
---------------
Memberships app Forms.py:
class InterestsForm(forms.ModelForm):
captcha = CaptchaField(widget=CustomCaptchaTextInput)
class Meta:
model = Profile
fields = ('favorite_subjects', 'favorite_courses',)
def __init__(self, *args, **kwargs):
super(InterestsForm, self).__init__(*args, **kwargs)
self.fields['favorite_subjects'].widget.attrs={ 'id': 'favorite_subjects_field', 'class': 'form-control', 'required': 'true', 'autocomplete':'off'}
self.fields['favorite_subjects'].widget.attrs['placeholder'] = 'Favorite Subjects'
self.fields['favorite_courses'].widget.attrs={ 'id': 'favorite_subjects_field', 'class': 'form-control', 'required': 'true', 'autocomplete':'off'}
self.fields['favorite_courses'].widget.attrs['placeholder'] = 'Favorite Courses'
self.fields['captcha'].widget.attrs['class'] = 'form-control mt-2'
self.fields['captcha'].widget.attrs['placeholder'] = 'Solve the captcha'
self.fields['captcha'].label = "For each number or letter, enter the next number or letter (Z becomes A and 9 becomes 0)"
---------------
Membership app Views.py:
def interest_view(request):
if request.method == 'POST':
form = InterestForm(request.POST)
if form.is_valid():
form.save()
context = {
'form':form
}
messages.info(request, "Successfully updated interests")
return render(request, "memberships/profile.html", context)
else:
form = InterestForm()
context = {
'form': form,
}
return render(request, "memberships/profile.html", context)