我如何允许用户使用此模型 post 视频:

How Can I allow user to post a video using this models:

我希望经过身份验证的用户能够 post 在此应用程序中我该怎么做? 我在 django 的 sqlite admin 中测试了它,它工作正常,现在我想允许用户从 addvideo 模板 post:

这是型号:

from django.db import models
from django.db.models.base import Model
from django.db.models.fields import CharField
from django.contrib.auth.models import User
from django.db import models

# Create your models here.
class Post(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    file = models.FileField(null=False, blank=False)
    title = CharField(max_length=25, blank=False)
    date_added = models.DateTimeField(auto_now_add=True) 

    def __str__(self):
        return self.title

这是我的添加视频模板:

    <div class="container">
    <div class="row justify-content-center">
        <div class="col-md-5">
            <form action="" method="POST" enctype="multipart/form-data">
                {% csrf_token %}
            <div class="card">        
                <div class="form-group m-3">
                    <label>Upload Your Video</label><br><br>
                     <input required
                      name="video" 
                      type="file" 
                      accept="video/*" 
                      class="form-control-file">
                </div>
                <div class="form-group m-3">
                    <label for="title">Your Topic</label>
                    <input type="text" class="form-control" name="title" id="title">
                </div>
                <button type="submit" class="btn btn-primary">Add Post</button>
            </div>
        </form>
        </div>
    </div>
</div>

这是我的 views.py 文件:

from django.shortcuts import render, redirect
from django.contrib.auth.models import User, auth
from django.contrib import messages
from .models import Post

def addvideo(request):
    posting = Post.objects.all()
    if request.method == 'POST':
        file = request.FILES.get('video')
        posting = Post.objects.create(
            file=file
        )
        return redirect('home')
    return render(request, 'addvideo.html', {'posting': posting})

def dashboard(request):
    posting = Post.objects.select_related('user')
    return render(request, 'dashboard.html', {'posting': posting})

def home(request):
    posting = Post.objects.select_related('user')
    return render(request, 'home.html', {'posting': posting})


def viewVideo(request, pk):
    posting = Post.objects.get(id=pk)
    return render(request, 'video.html', {'posting': posting })

对我来说,解决这个问题最简单的方法是使用 CreateView

views.py 文件:

from django.views.generic import CreateView
from django.contrib.auth.mixins import LoginRequiredMixin

from .models import Post # Will import Your `Post` model

class PostCreateView(LoginRequiredMixin, CreateView):
    model = Post
    fields = ['title', 'file']
    success_url = '/'
    template_name = 'addvideo.html'

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super(PostCreateView, self).form_valid(form)

model 是您的模型名称(在您的例子中是 Post)。

fields 是您要在模板中显示的字段列表。

template_name 是模板的路径。

success_url是Post创建成功后用户重定向的路径。

form_valid 会将当前 logged-in 用户保存为 post.

的所有者

addvideo.html 文件:

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="submit">
</form>

要在您的模板上使用自定义样式,您可以使用 django-widget-tweaks package, Here is a step-by-step tutorial on how to use this package link