鱼C论坛

 找回密码
 立即注册
查看: 1407|回复: 2

[已解决]python django 博客 用户怎么修改文章?

[复制链接]
发表于 2022-4-7 12:37:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想实现用户修改文章, 但是有一块内容获得不了

参考修改用户信息做的:
@login_required(login_url='users:login')   # 登录之后允许访问
def editor_users(request):
    """ 编辑用户信息 """
    user = User.objects.get(id=request.user.id)
    if request.method == "POST":
        try:
            userprofile = user.userprofile
            form = UserForm(request.POST, instance=user)
            user_profile_form = UserProfileForm(request.POST, request.FILES, instance=userprofile)  # 向表单填充默认数据
            if form.is_valid() and user_profile_form.is_valid():
                form.save()
                user_profile_form.save()
                return redirect('users:user_profile')
        except UserProfile.DoesNotExist:   # 这里发生错误说明userprofile无数据
            form = UserForm(request.POST, instance=user)       # 填充默认数据 当前用户
            user_profile_form = UserProfileForm(request.POST, request.FILES)  # 空表单,直接获取空表单的数据保存
            if form.is_valid() and user_profile_form.is_valid():
                form.save()
                # commit=False 先不保存,先把数据放在内存中,然后再重新给指定的字段赋值添加进去,提交保存新的数据
                new_user_profile = user_profile_form.save(commit=False)
                new_user_profile.owner = request.user
                new_user_profile.save()

                return redirect('users:user_profile')
    else:
        try:
            userprofile = user.userprofile
            form = UserForm(instance=user)
            user_profile_form = UserProfileForm(instance=userprofile) 
        except UserProfile.DoesNotExist:
            form = UserForm(instance=user)
            user_profile_form = UserProfileForm()  # 显示空表单
    return render(request, 'users/editor_users.html', locals())
{% extends 'users/user_profile.html' %}
{% load static %}
{% block title %}
<li class="is-active"><a>修改用户信息</a></li> 
{% endblock title %}

{% block content %}
<div class="content">
    <fieldset disabled style="margin-bottom: 1em">
        <div class="field is-horizontal">
          <div class="field-label is-normal">
            <label class="label">用户名</label>
          </div>
          <div class="field-body">
            <div class="field">
              <p class="control is-expanded has-icons-left">
                <input class="input" type="text" placeholder="Name" value="{{ user.username }}">
                <span class="icon is-small is-left">
                  <i class="fas fa-user"></i>
                </span>
              </p>
            </div>
          </div>  
        </div>
        <div class="field is-horizontal">
          <div class="field-label is-normal">
            <label for="{{ user.email.id_for_label }}" class="label">邮箱</label>
          </div>
          <div class="field-body">
            <div class="field">
              <div class="control">
                  {{ user.email }}
              </div>
            </div>
          </div>
      </div> 
    </fieldset>
  
    
    <form action="{% url 'users:editor_users' %}" method="post" enctype="multipart/form-data">
      {% csrf_token %}
      
        {% for field in user_profile_form %}
        <div class="field is-horizontal">
            <div class="field-label is-normal">
              <label for="{{ field.id_for_label }}" class="label">{{ field.label }}</label>
            </div>
            <div class="field-body">
              <div class="field">
                <div class="control">
                   {{ field }}
                </div>
              </div>
            </div>
        </div>
        {% endfor %}
        <input class=" button is-primary is-pulled-right" type="submit" value="提交修改">
        <div class=" is-clearfix"></div>
    </form>
</div>
{% endblock content %}

这是我的修改文章的逻辑:
@login_required(login_url='users:login')   # 登录之后允许访问
def post_change(request, post_id):
    # 文章详情页
    user = User.objects.get(id=request.user.id)
    post_info = get_object_or_404(Post, id=post_id)
    # print(type(post_info),)
    if request.method == "POST":
        post_form = PostForm(request.POST, request.FILES, instance=post_info)  # 向表单填充默认数据
        if post_form.is_valid():
            post_form.save()
            return redirect('users:post_manage')

    else:
        post_form = PostForm(request.POST, request.FILES, instance=post_info)  # 向表单填充默认数据
        print(post_form, '='*100)
    context = {'post': post_form}
    return render(request, 'users/post_change.html', context)
{% extends 'users/user_profile.html' %}
{% load static %}
{% block title %}
<li class="is-active"><a>修改文章</a></li> 
{% endblock title %}

{% block content %}
<div class="content">
    <form action="{% url 'users:editor_users' %}" method="post" enctype="multipart/form-data">
      {% csrf_token %}
      
        {% for field in post_form %}
        <div class="field is-horizontal">
            <div class="field-label is-normal">
              <label for="{{ field.id_for_label }}" class="label">{{ field.label }}</label>
            </div>
            <div class="field-body">
              <div class="field">
                <div class="control">
                   {{ field }}
                </div>
              </div>
            </div>
        </div>
        {% endfor %}
        <input class=" button is-primary is-pulled-right" type="submit" value="提交修改">
        <div class=" is-clearfix"></div>
    </form>
</div>
{% endblock content %}

这是 print(post_form) 的结果:
<tr>
    <th><label for="id_title">文章标题:</label></th>
    <td>
      <ul class="errorlist"><li>这个字段是必填项。</li></ul>
      <input type="text" name="title" maxlength="61" required id="id_title">


    </td>
  </tr>

  <tr>
    <th><label for="id_desc">文章描述:</label></th>
    <td>

      <textarea name="desc" cols="40" rows="10" maxlength="200" id="id_desc">
</textarea>


    </td>
  </tr>

  <tr>
    <th><label for="id_category">分类:</label></th>
    <td>
      <ul class="errorlist"><li>这个字段是必填项。</li></ul>
      <select name="category" required id="id_category">
  <option value="" selected>---------</option>

  <option value="1">这是分类1</option>

  <option value="2">这是分类2</option>

</select>


    </td>
  </tr>

  <tr>
    <th><label for="id_content">文章详情:</label></th>
    <td>
      <ul class="errorlist"><li>这个字段是必填项。</li></ul>
      <textarea name="content" cols="40" rows="10" required id="id_content">
</textarea>


    </td>
  </tr>

  <tr>
    <th><label for="id_tags">文章标签:</label></th>
    <td>

      <select name="tags" id="id_tags">
  <option value="" selected>---------</option>

  <option value="1">这是标签</option>

</select>




    </td>
  </tr>

啥都没拿到!

本来应该有这篇文章的各种信息的

求助哪儿出了问题?
最佳答案
2022-4-7 13:45:16
本帖最后由 阿奇_o 于 2022-4-7 13:46 编辑

这种只能自己一步步确认咯,比如
  - post的数据,后端是否正确地拿到了?
  - 相应的文章内容,即 数据(数据库)是否正确地 被修改了?
  - views视图函数,是否能正确读取到已修改的数据?
  - view --> tempalte , 视图函数传给html模板的数据,能否正确显示出来?

…… Good Luck.

本帖被以下淘专辑推荐:

  • · django|主题: 61, 订阅: 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-7 13:45:16 | 显示全部楼层    本楼为最佳答案   
本帖最后由 阿奇_o 于 2022-4-7 13:46 编辑

这种只能自己一步步确认咯,比如
  - post的数据,后端是否正确地拿到了?
  - 相应的文章内容,即 数据(数据库)是否正确地 被修改了?
  - views视图函数,是否能正确读取到已修改的数据?
  - view --> tempalte , 视图函数传给html模板的数据,能否正确显示出来?

…… Good Luck.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-7 23:47:47 | 显示全部楼层
阿奇_o 发表于 2022-4-7 13:45
这种只能自己一步步确认咯,比如
  - post的数据,后端是否正确地拿到了?
  - 相应的文章内容,即 数据 ...

哈哈, 还是谢了,问题解决了
返回的数据类型不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 14:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表