Django 2.0.3将数据添加到数据库

时间:2018-07-25 18:04:30

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

在django 2.0.3中向数据库添加数据时我遇到了一个小问题

我创建了以下模型:

from django.contrib.auth.models import User

class UserInputSignal(models.Model):

    name = models.CharField(max_length=512)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    input_file = models.FileField(upload_to='signals/', null=True)

我尝试使用以下表格解决问题:

from django import forms
from .models import UserInputSignal

class UserInputSignalForm(forms.ModelForm):

    name = forms.CharField()
    input_file = forms.FileField()

    class Meta:
        model = UserInputSignal
        fields = ('name', 'input_file', )

和此视图:

from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth import authenticate
from .forms import UserInputSignalForm

@login_required
def storage(request):

form = UserInputSignalForm(request.POST or None)

if request.method == 'POST':
    if form.is_valid():
        name = request.POST.get('name')
        author = request.POST.get(request.user)
        input_file = request.POST.get('input_file')

        return redirect('home')

else:
    form = UserInputSignalForm()

return render(request, 'storage.html', {'form': form})

在我调用的模板中,我创建了如下表单:

  <form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Upload</button>
  </form>

我能够加载带有表单的页面,但是它不会将数据发布到数据库中。我想补充一点,我是django的新手,有些机制对我来说是完全可以理解的。我可以向某人寻求帮助吗?

2 个答案:

答案 0 :(得分:2)

在重定向之前,请致电form.save()

答案 1 :(得分:0)

好的,我正在处理您的代码,并且只需稍作修改即可与我一起工作:

models.py

class UserInputSignal(models.Model):

name = models.CharField(max_length=512)
author = models.ForeignKey(User, on_delete=models.CASCADE)
input_file = models.FileField(upload_to='signals/', null=True)
objects = models.Manager()

#this returns the name for your modelobject
def __str__(self):
    return self.name

forms.py

#excluded the assiging as fields defination is enough in itself

class UserInputSignalForm(forms.ModelForm):
    class Meta:
        model = UserInputSignal
        #this will exclude the formfield it self but the author will be saved as the person who is logged in
        exclude = ["author"]

Edited - Views.py

@login_required
def storage(request):
    #authentication for author field using request.user
    insta = UserInputSignal(author=request.user)
    print(request.user)
    form = UserInputSignalForm(request.POST or None, request.FILES or None,instance=insta)
    if request.method == 'POST':        
        if form.is_valid():
            signal = form.save(commit=False)           
            signal.save()

            return redirect('home')
    else:
        form = UserInputSignalForm(instance=insta)
    return render(request,  'storage.html', {'form': form})

JlucasRs告诉您使用form.save()是正确的,但是您需要将表单分配给某些内容,并且不需要在这里使用模型字段,因为forms.py会为您这样做。

app/Urls.py -仅供参考

urlpatterns = [
path('home/', home, name='home'),
path('storage/', storage, name='storage'),
]

编辑-Admin.py

from .models import PostModel, UserInputSignal

class UserInputSignalAdmin(admin.ModelAdmin):
     list_display = ('name', 'author', 'input_file' )
admin.site.register(UserInputSignal, UserInputSignalAdmin)

将此代码添加到Admin.py中(如果不存在)。