Django Форма для обновления записей базы данных другого приложения - PullRequest
0 голосов
/ 02 мая 2020

Я хочу иметь возможность обновлять записи в профиле таблицы пользовательского приложения 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)
...