首页 > 解决方案 > 在 django 中从前端向数据库添加数据

问题描述

我正在写一个小博客,我希望有一个页面,通过该页面我将在不进入管理面板的情况下更新网站,但似乎没有得到正确的结果。我已经写了一个视图函数,但它还没有响应。我还是个新手下面是我的models.py文件

class UserUpload(models.Model):
    artist = models.CharField(max_length=300)
    title = models.CharField(max_length=200, unique=True)
    slug = models.SlugField(default='', blank=True, unique=True)
    thumbnail = models.ImageField(blank=False)
    audio_file = models.FileField(default='')
    music_tag = models.ManyToManyField(MusicTag)
    uploaded_date = models.DateTimeField(default=timezone.now)
    page_views = models.IntegerField(default=0)
    moderation = models.BooleanField(default=False)

    class Meta:
        ordering = ['-uploaded_date']

    def save(self):
        self.uploaded_date = timezone.now()
        self.slug = slugify(self.title)
        super(UserUpload, self).save()

    def __str__(self):
        return self.title + ' by ' + self.artist

    def get_absolute_url(self):
        return reverse('music:detail', kwargs={'slug': self.slug})

这是我的views.py 文件

def upload(request):
    if request.method == 'POST':
        AUDIO_FILE_TYPE = ['wav', 'mp3', 'ogg']
        IMAGE_FILE_TYPE = ['png', 'jpg', 'jpeg']
        form = UserMusicForm(request.POST or None, request.FILES or None)
        if form.is_valid():
            form.save(commit=False)
            form.artist = request.POST.get('artist')
            form.title = request.POST.get('title')
            form.thumbnail = request.POST.FILES('thumbnail')
            form.audio_file = request.POST.FILES('audio_file')
            form.music_tag = request.POST.get('music_tag')
            messages.success(request, 'has been successfully uploaded')

            if form.thumbnail.url.split('.')[-1] not in IMAGE_FILE_TYPE:
                context = {
                    "form": form,
                    "message": "Image file must be PNG, JPG, or JPEG"
                }
                return render(request, "music/upload1.html", context)

            if form.audio_file.url.split('.')[-1] not in AUDIO_FILE_TYPE:
                context = {
                    "form": form,
                    "message": "Audio file must be WAV, MP3, or OGG"
                }
                return render(request, "music/upload1.html", context)
            print("Remaining save")
            form.save()
            return redirect('/')
    else:
        form = UserMusicForm(request.POST or None, request.FILES or None)
        context = {
            "form": form,
            "title": "Upload Your Song",
        }
        return render(request, "music/upload1.html", context)

这是我的 html 文件

<div class="login-box">
    <h2>Upload Your Song</h2>
    <form action="" method="POST">{% csrf_token %}
        <div class="user-box">
            <input type="text" name="artist" required="required">
            <label>Artist</label>
        </div>
        <div class="user-box">
            <input type="text" name="title" required="">
            <label>Title</label>
        </div>
        <div class="user-box">
            <input type="file" name="thumbnail" required="">
            <label>Thumbnail</label>
        </div>
        <div class="user-box">
            <input type="file" name="audio_file" required="">
            <label>Audio file</label>
        </div>
        <div class="user-box">
            <input type="text" name="music_tag" required="">
            <label>Music tag</label>
        </div>
        <a href="{% url 'music:upload'%}">
            <span></span>
            <span></span>
            <span></span>
            <span></span>
            Submit
        </a>
    </form>
</div>

下面是我的表格

class UserMusicForm(forms.ModelForm):

    class Meta:
        model = UserUpload
        fields = ('artist', 'title', 'thumbnail', 'audio_file', 'music_tag')

标签: django

解决方案


推荐阅读