Django Form ForeignKey保存

时间:2018-08-06 16:00:09

标签: python django django-forms

很抱歉提出愚蠢的问题,但我不明白。我正在尝试使用Django Forms,我有2个模型

class Post(models.Model):
unit = models.ForeignKey('Unit',on_delete=models.CASCADE, primary_key=False)

class Unit(models.Model):
name = models.CharField(max_length=120, unique = True)

我已经创建了一个表单

from django import forms
from .models import Post, Unit, StatusOfPost


class PostForm(forms.ModelForm):
class Meta:
    model = Post
    fields = [
        'unit',
    ]

比我写的view.py

def ideaNewForm(request):
unit = Unit.objects.get(name=request.POST['unit'])
user = request.user
if request.method == 'POST':
    form = PostForm(request.POST)
    if form.is_valid():
        idea = form.save(commit=False)
        idea.unit = unit
        idea = Post.objects.create(
            author = user,
        )
        return redirect('postsList')
else:
    form = PostForm()
return render(request, 'post_new.html', {'form':form})

不存在单位匹配查询。-我有这样的问题。 我有一个下拉列表,它是一个单元模型。如何正确保存?

在我没有Django Form的情况下

unit   = Unit.objects.get(name=request.POST['unit'])

效果很好,但是我想使用Django表单

2 个答案:

答案 0 :(得分:1)

您刚在['unit']之后错过了request.POST

def ideaNewForm(request):
    unit = Unit.objects.get(name=request.POST['unit'])
    (...remaining codes...)

答案 1 :(得分:1)

我不太确定为什么要尝试单独购买该单元。这是在表单中选择的内容,无需获取;仅保存表单将创建具有所选单位的帖子。您唯一需要做的就是添加用户。

def ideaNewForm(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            idea = form.save(commit=False)
            idea.author = request.user
            idea.save()
            return redirect('postsList')
    else:
        form = PostForm()
    return render(request, 'post_new.html', {'form':form})