【问题标题】:User form foreignkeyfield form not valid用户表单外键字段表单无效
【发布时间】:2022-01-24 08:31:20
【问题描述】:

我正在创建一个基于帖子的网站,我想显示作者的姓名以显示在添加帖子时它在管理站点中工作的帖子中,但是当我尝试从该站点上传帖子时,表单没有得到验证,因此它没有得到保存,请帮助 型号:

from django.conf import settings

class MemeImg(models.Model):
    Title = models.CharField(max_length=500)
    op = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, default=None, blank=True, null=True)
    date_created = models.DateTimeField(auto_now_add=True)
    Post_Img = CloudinaryField('Post')

表格:

class PostImg(forms.ModelForm):
    class Meta:
        model = MemeImg
        fields = ['Title', 'op', 'Post_Img']

查看:

@login_required(login_url='/login')
def post(request):
    func = data(request)
    if request.method == 'POST':
        form = PostImg(request.POST, request.FILES, instance=request.user)
        form.op = request.user
        if form.is_valid():
            print('success')
            posts = form.save(commit=False)
            posts.op = request.user
            form.save()
            return HttpResponseRedirect('https://youtu.be/dQw4w9WgXcQ')
        else:
            print("fail")
    form = PostImg(request)
    ctx = {
        'form': form,
        'url': func[0],
        'name': func[1],
        'date': func[2],
    }
    return render(request, 'Post.html', ctx)

最后是帖子页面模板:

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <div class="container">
        {{ form.Title|materializecss }}
        <div class="file-field input-field">
            <div class="btn">
                <span>File</span>
                <input type="file">
            </div>
            <div class="file-path-wrapper">
                {{ form.Post_Img }}
                <input class="file-path validate" type="text">
            </div>
        </div>
        <button class="btn waves-effect waves-light" type="submit" name="action">Submit
            <i class="material-icons right">send</i>
        </button>
    </div>
</form>

如果需要更多代码,请评论它 非常感谢

【问题讨论】:

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


    【解决方案1】:

    我认为您的问题来自 instance=request.user 的表单实例,实际上该实例应该是 MemeImg 对象实例而不是用户,这使得它不保存图像。所以我已经删除了实例,而且我不知道你在为 'url': func[0],'name': func[1], 'date': func[2] 使用那些额外的上下文变量是什么?所以我也删除了它们,让事情变得简单。现在我认为您应该能够毫无问题地保存。

    @login_required(login_url='/login')
    def post(request):
        if request.method == 'POST':
            form = PostImg(request.POST, request.FILES)
            if form.is_valid():
                print('success')
                data = form.save(commit=False)
                data.op = request.user
                form.save()
                return HttpResponseRedirect('https://youtu.be/dQw4w9WgXcQ')
            else:
                print("fail")
                form = PostImg(request.POST)
        ctx = {
            'form': form,
        }
        return render(request, 'Post.html', ctx)
    
    

    您的表单中还有 {{ form.Post_Img }} 我不知道您希望使用这些变量完成什么?正确的方法是执行 {{ form.as_p }} 或只是调用像这样 {{ form }} 这样的表格,所以我在你的 HTML 中进行了更正 也是。

    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <div class="container">
            {{ form.Title|materializecss }}
            <div class="file-field input-field">
                <div class="btn">
                    <span>File</span>
                    <input type="file">
                </div>
                <div class="file-path-wrapper">
                    {{ form }}
                    <input class="file-path validate" type="text">
                </div>
            </div>
            <button class="btn waves-effect waves-light" type="submit" name="action">Submit
                <i class="material-icons right">send</i>
            </button>
        </div>
    </form>
    

    【讨论】:

    • 非常感谢,我会支持你,但我没有足够的声誉
    • 您不需要声誉来标记已接受的答案,也不需要投票您认为对您有用的答案!不客气!
    • 标记接受答案,让其他人从帖子中受益,如果它有助于解决您的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多