如何使用Django的HTML表单编辑用户个人资料的一部分。

时间:2018-08-30 23:48:21

标签: django python-3.x django-models django-forms django-views

我有一个用户个人资料模型,我使用django模型形式创建和编辑用户个人资料,现在我只想更改个人资料latlon上的两个字段。所以在我的Index.html上,我有一个小的html表单。用户单击后,立即找到我。纬度和经度将自动归档,并且使用Jquery单击提交按钮。如何使用此表单中的详细信息来更新用户latlon。只是我没有使用django的HTML表单,而是需要将在此迷你表单上输入的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),以将latlon添加到现有的配置文件中。还是有一种方法可以使用现有的视图和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)

下面是我的表格。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') 

下面是我的网址

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:我从此处修剪了geodjango代码,因为它不是此问题的一部分

1 个答案:

答案 0 :(得分:0)

您绝对可以在视图的帖子中编辑详细信息。 首先,在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. Retrieving data from HTML form

2. Updating database entry

希望这会有所帮助!

编辑:

强烈建议您将表单作为Django表单,然后简单地add the desired HTML attribute there。这样,您就可以像通常使用Django表单一样调用表单。