【问题标题】:How do I pass the users model as the ForeignKey value while saving a ModelForm in Django?如何在 Django 中保存 ModelForm 时将用户模型作为 ForeignKey 值传递?
【发布时间】:2020-04-26 23:09:01
【问题描述】:

模型文件:

from django.db import models
from django.conf import settings


class Book(models.Model):
    rel_user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name="Posted By")
    title = models.CharField(max_length=256, verbose_name="Title")
    description = models.TextField(verbose_name="Description")
    price = models.IntegerField(verbose_name="Price")
    state = models.CharField(max_length=256, verbose_name="State")
    city = models.CharField(max_length=256, verbose_name="City")
    neighbourhood = models.CharField(max_length=256, verbose_name="Neighbourhood")
    phone = models.IntegerField(verbose_name="Phone Number")

    def __str__(self):
        return self.title + f" ({self.rel_user.username})"

表格文件:

from django.forms import ModelForm
from Books.models import Book


class BookForm(ModelForm):
    class Meta:
        model = Book
        fields = ['title', 'description', 'price', 'state', 'city', 'neighbourhood', 'phone']

视图文件:

from django.shortcuts import render, redirect
from Books.forms import BookForm
from django.contrib import messages


def sell(request):
    if request.method == "GET":
        form = BookForm()
    else:
        form = BookForm(request.POST, )
        if form.is_valid():
            form.save()
            messages.success("Successfully added!")
            return redirect('sell')
        else:
            messages.error("Please fill in all the fields.")
    return render(request, 'Books/sell.html', {"form": form})

每次用户提交表单时,我都希望用该用户模型填充 ForeignKey 的值。我该怎么做呢? 所以假设用户“John”已经填写了表格。当他点击提交时,他输入的详细信息 + 他的用户模型应该进入该条目的数据库。

【问题讨论】:

  • 你的意思是,rel_user 应该分配给登录用户?
  • 是的,rel_user 应该分配给登录用户。

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


【解决方案1】:
def sell(request):
    if request.method == "POST":
        form = BookForm(request.POST)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.rel_user = request.user
            instance.save()
            messages.success("Successfully added!")
            return redirect('sell')
        else:
            messages.error("Please fill in all the fields.")
    else:
         form = BookForm()
    return render(request, 'Books/sell.html', {"form": form}

request.user 可以像上面那样分配给 rel_user

【讨论】:

    【解决方案2】:

    您可以将用户分配给form的instance:

    从 django.shortcuts 导入渲染,重定向 从 Books.forms 导入 BookForm 从 django.contrib 导入消息

    def sell(request):
        if request.method == 'GET':
            form = BookForm()
        else:
            form = BookForm(request.POST)
            form.instance.rel_user = request.user
            if form.is_valid():
                form.save()
                messages.success('Successfully added!')
                return redirect('sell')
            else:
                messages.error('Please fill in all the fields.')
        return render(request, 'Books/sell.html', {'form': form})

    【讨论】:

      猜你喜欢
      • 2012-07-23
      • 1970-01-01
      • 2023-03-28
      • 2020-06-17
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 2014-07-23
      • 2014-12-10
      相关资源
      最近更新 更多