Как использовать HTML-форму Django для редактирования части профиля пользователя. - PullRequest
0 голосов
/ 31 августа 2018

У меня есть модель профиля пользователя. Я использую формы модели django для создания и редактирования профилей пользователей. Теперь я хочу изменить только 2 поля в профилях lat и lon. Так что в моем Index.html у меня есть небольшая HTML-форма. Как только пользователь нажимает, найдите меня. Широта и долгота автоматически регистрируются, и кнопка отправки будет нажата с помощью Jquery. Как использовать данные из этой формы для обновления моих пользователей lat и lon. Просто я не использовал HTML-форму django, и мне нужно обновить lat lon, введенный в эту мини-форму, до профиля пользователя

enter image description here

        <form method="post" action="{{ ??????????? }}">
            <input id="jsLat" type="text" placeholder="latittude" >
            <input id="jsLon" type="text" placeholder="longitude">
            <button type="submit" id="submit">Submit</button>
        </form>

Должен ли я создать другой вид & URL (таким образом у меня будет 2 вида для редактирования профиля и 2 URL-адреса для редактирования профиля), чтобы добавить lat и lon к моему существующему профилю. Или есть ли способ, которым я могу использовать существующее представление и URL-адрес и обновить 2 поля

ниже мои модели

    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        city = models.CharField(max_length=100)
        age = models.DateField(blank=True, null=True)
        profile_image = models.ImageField(default='', blank=True, null=True)
 null=True)
        is_verified = models.BooleanField(default=False)
        lat = models.FloatField(blank=True, null=True)
        lon = models.FloatField(blank=True, null=True)

Ниже представлен мой профиль

@login_required
def edit_profile(request):
    if request.method == 'POST':
        user_form = UserEditForm(data=request.POST or None, instance=request.user)
        profile_form = ProfileEditForm(data=request.POST or None, instance=request.user.profile, files=request.FILES)
        if user_form.is_valid() and profile_form.is_valid():
                user_form.save()
                profile_form.save()
            return redirect('accounts:profile', username=request.user.username)
    else:
        user_form = UserEditForm(instance=request.user)
        profile_form = ProfileEditForm(instance=request.user.profile)

    context = {'user_form': user_form,
               'profile_form': profile_form}
    return render(request, 'accounts/profile_edit.html', context)

Ниже приведены мои forms.py

class UserEditForm (forms.ModelForm):

    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'email', 'username')

class ProfileEditForm(forms.ModelForm): #UserProfileForm or ProfileEdit

    class Meta:
        model = Profile
        fields = ('city', 'age', 'profile_image','lat','lon') 

Ниже мои URL

urlpatterns = [        
    url(r'^profile/(?P<username>[-\w]+)/$', views.ProfileView.as_view(), name='profile'),
    url(r'^edit_profile/$', views.edit_profile, name='edit_profile'),

#Profile created automatically when user is created
]

PS: отсюда я сократил код геоджанго, поскольку он не является частью этого вопроса

1 Ответ

0 голосов
/ 31 августа 2018

Вы определенно можете редактировать детали в сообщении вашего представления. Во-первых, в вашем HTML вы должны указать свои входные данные.

        <form method="post”>
        <input id="jsLat" type="text" placeholder="latittude" name=“Lat” >
        <input id="jsLon" type="text" placeholder="longitude" name=“Long”>
        <button type="submit" id="submit">Submit</button>
    </form>

Затем в своем посте вы можете получить данные, выполнив: lat = request.POST[‘Lat’] или lon = request.POST[‘Lon’]

Следующий шаг - обновить запись в базе данных.

Для этого вам нужно получить объект пользователя.

user = User.objects.get(instance=request.user)

Получив это, вы можете обновить поля следующим образом:

user.latitude = lat
user.longitude = lon 
user.save()

Дополнительная ссылка:

1. Получение данных из формы HTML

2. Обновление записи базы данных

Надеюсь, это поможет!

Edit:

Рекомендуется, чтобы у вас была форма в виде формы Django, а затем просто добавьте туда необходимый атрибут HTML . Это позволяет вам вызывать форму, как обычно, для формы Django.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...