Django:当由窗体创建时,将一个类链接到另一个带有外键的类

2024-04-26 06:46:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我会尽可能多地提供信息,而不超过我所需要的。在

我有一个类“Book”,它与其他字段链接到另一个类“User”,如:

from users.models import User
class Book(models.Model):
    title = models.CharField(max_length=150)    
    owner = models.ForeignKey('users.User')

此“书”由一个表单创建,其编码如下:

^{pr2}$

此表单显示的模板如下所示:

    <form method="post" action="">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" />
    </form>

它由以下视图调用:

def create_book(request):
    if request.user is None:
        return redirect("/users/login/")
    if request.method == "POST":
        form = BookForm(request.POST)
        if form.is_valid():
            form.owner = request.user   # FFFFFUUUUUUU
            form.save()
            return redirect("/books/")
    else:
        form = BookForm()
    return render_to_response("books/create.html", {
        "form": form,
    }, context_instance=RequestContext(request))

当提交这个表单时,它应该将新书放入数据库,但是我得到一个错误:IntegrityError at /books/create/ null value in column "owner_id" violates not-null constraint

我想我没有正确设置所有者。关于上述情况,表格所有者= 请求.用户,的请求.用户bit由中间件设置: 从用户.模型导入用户

class UserMiddleware(object):
    def process_request(self, request):
        user_id = request.session.get("user_id")
        if user_id is not None:
            request.user = User.objects.get(pk=user_id)
        else:
            request.user = None

我的用户可以验证我的代码是否有效。我对Python/Django非常陌生,我敢打赌,我设置新书所有者的方式是不正确的,但可能是其他地方出了问题。如果需要更多的信息,请告诉我,我希望这不是太多!在

谢谢你的帮助。在


Tags: 用户formnoneid表单returnifis
1条回答
网友
1楼 · 发布于 2024-04-26 06:46:09

您需要在通过保存表单而不是表单本身创建的book对象上设置用户。代码应为:

    if form.is_valid():
        book = form.save(commit=False)
        book.owner = request.user
        book.save()

执行form.save(commit=False)操作将返回一个未保存的book实例,您可以在将其保存到数据库之前对其进行修改。在

相关问题 更多 >

    热门问题