如何使用 Django 的 HTML 表单来编辑用户配置文件的一部分。

Posted

技术标签:

【中文标题】如何使用 Django 的 HTML 表单来编辑用户配置文件的一部分。【英文标题】:How to use Django's HTML form to edit a part of users profile. 【发布时间】:2019-02-05 23:21:44 【问题描述】:

我有一个用户配置文件模型我使用 django 模型表单来创建和编辑用户配置文件现在我只想更改配置文件 latlon 上的两个字段。所以在我的 Index.html 我有一个小的 html 表单。只要用户点击找到我。纬度和经度会自动归档,并使用 Jquery 单击提交按钮。如何使用此表单中的详细信息更新我的用户 latlon。只是我没有使用 django 的 HTML 表单,我需要将在这个迷你表单上输入的 lat lon 更新到用户配置文件

        <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)

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

以下是我的网址

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】:

您绝对可以在您的视图帖子中编辑详细信息。 首先,在您的 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 表单一样调用表单。

【讨论】:

什么是表单动作 我还要在哪里添加request.user.profile.lat = Lat 我无法在现有视图中添加它,因为if request.method == 'POST': 实际上正在调用与 index.html 中的简单 HTML 表单不同的配置文件编辑表单 对不起,您应该使用 Django 表单而不是 request.POST @e4c5,是的,Django 表单更受欢迎,但如果它不是一个选项,这仍然是可能的。 Felix 从 request.get 或 request.post 获取原始数据几乎从来没有正确的方法

以上是关于如何使用 Django 的 HTML 表单来编辑用户配置文件的一部分。的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中创建用于编辑的填充表单

Django 动态表单,带有 HTML 数组的表单集

如何在 Django 的 fieldset.html 中调整网格

如何在Django Admin Page中编辑请求的参数?

django 编辑表单,数据怎么回显呀

如何从 Django 中的编辑表单更新对象?