【问题标题】:update / edit function in django one-to-one modelsdjango 一对一模型中的更新/编辑功能
【发布时间】:2015-03-04 06:01:24
【问题描述】:

我在 django 中制作了一个编辑表单,但我的更新功能遇到了问题。有一种使用一对一关系的关系模型。当我运行此函数时,用户模型中的数据正确存储,但不在 UserProfile 模型中。

这是我的 urls.py

url(r'^update_user/(?P<pk>\d+)$', views.update_user, name='update_user'),

这是我的模型:

class UserProfile(models.Model):
    user = models.OneToOneField(User)

    CATEGORY_CHOICES = (
        ('admin','Admin'),
        ('user','User'),
        )
    hak_akses = models.CharField(max_length=100, choices = CATEGORY_CHOICES)

    def __unicode__(self):
        return self.user.username

这是我的观点.py

def update_user(request, pk, template_name='form_user.html'):
    related = User.objects.select_related().all()
    user = get_object_or_404(related, pk=pk)
   # profile = get_object_or_404(UserProfile, pk=pk)
    if request.POST:
        user_form = UserForm(data=request.POST, instance=user)
        profile_form = UserProfileForm(data=request.POST, instance=user)
        if user_form.is_valid() and profile_form.is_valid():
            user.set_password(user.password)
            user.save()
            profile = profile_form.save(commit=False)
            profile.user = user
            profile.save()
            return redirect('manajemen_user')

    else:
        user_form = UserForm(instance=user)
        profile_form = UserProfileForm(instance=user)

    return render_to_response(template_name, {
        'user_form': user_form, 'profile_form': profile_form,
    }, context_instance=RequestContext(request))

这是我的表格:

class UserForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput())

    class Meta:
        model = User
        fields = ('username', 'password')

class UserProfileForm(forms.ModelForm):
    CATEGORY_CHOICES = (
        ('admin','Admin'),
        ('user','User'),
        )
    hak_akses = forms.ChoiceField(choices = CATEGORY_CHOICES)
    class Meta:
        model = UserProfile
        fields = ('hak_akses',)

这是我的表单模板 html:

<form name="tambah_user" class="form-horizontal style-form" method="POST">{% csrf_token %}
            <div class="form-group">

              <label class="col-sm-2 col-sm-2 control-label">Nama User</label>
              <div class="col-sm-10">
                <!-- <input type="text" class='form-control'> -->
                {{ user_form.username }}
              </div>
            </div>
            <div class="form-group">
              <label class="col-sm-2 col-sm-2 control-label">Password</label>
              <div class="col-sm-10">
                {{ user_form.password }}
              </div>
            </div>
            <div class="form-group">
              <label class="col-sm-2 col-sm-2 control-label">Hak Akses</label>
              <div class="col-sm-10">
                {{ profile_form.hak_akses }}
                <br><br><br>
                <button type="submit" class="btn btn-theme">Submit</button>
              </div>
            </div>
          </form>
  1. 为什么用户模型中的数据正确更新,但在 UserProfile 模型中没有?
  2. 有什么解决办法?

非常感谢

【问题讨论】:

    标签: python django django-models django-forms django-views


    【解决方案1】:

    您应该使用UserProfile 实例而不是User 构造UserProfileForm 表单:

    profile = UserProfile.objects.filter(user=user).first()
    ...
    profile_form = UserProfileForm(data=request.POST, instance=profile)
    ...
    profile_form = UserProfileForm(instance=profile)
    

    如果您确定该配置文件已经存在,那么您可以编写:

    profile = user.userprofile
    

    而不是 filter().first() 调用。

    【讨论】:

    • 非常感谢先生。有用。我不知道我必须在个人资料上写什么。现在我明白了。谢谢你,先生。 ^__^ 真的,我仍然对 django orm 感到困惑。那可能是像我这样的新手问题。谢谢。
    猜你喜欢
    • 2016-12-11
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    相关资源
    最近更新 更多