当前位置: 首页 > 面试题库 >

在Django ModelForm上使用request.user

黄元章
2023-03-14
问题内容

我在登录用户和Django时遇到问题ModelForm。我有一个名为的类_Animal_,该类具有ForeignKeyto User和与该动物有关的一些数据,例如年龄,种族等。

用户可以将动物添加到数据库,并且我必须跟踪每个动物的作者,因此我需要添加在用户创建动物实例时记录的request.user。

models.py

class Animal(models.Model):
    name = models.CharField(max_length=300)
    age = models.PositiveSmallIntegerField()
    race = models.ForeignKey(Race)
    ...
    publisher = models.ForeignKey(User)
    def __unicode__(self):
        return self.name

class AnimalForm(ModelForm):
    class Meta:
        model = Animal

主要目标是隐藏表单中的发布者字段,并在单击保存按钮时提交登录的用户。

我可以使用来在视图中捕获当前用户initial,但是我也想要不显示该字段。

views.py

@login_required
def new_animal(request):
    if request.method == "POST":
        form = AnimalForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/')
        else:
            variables = RequestContext(request, {'form': form})
            return render_to_response('web/animal_form.html', variables)
    else:
        form = AnimalForm(initial={'publisher': request.user})
    variables = RequestContext(request, {'form': form})
    return render_to_response('web/animal_form.html', variables)

问题答案:

你只需要从表单中排除它,然后在视图中进行设置即可。

class AnimalForm(ModelForm):
    class Meta:
        model = Animal
        exclude = ('publisher',)

…并在视图中:

    form = AnimalForm(request.POST)
    if form.is_valid():
        animal = form.save(commit=False)
        animal.publisher = request.user
        animal.save()

(还请注意,第一个else子句(紧随重定向之后的各行)是不必要的。如果不加说明,执行将落入视图末尾的两行,它们是相同的。)



 类似资料:
  • 问题内容: 有人尝试过使用Android应用程序吗? 可能吗?我试图从中使用Jar,并收到以下异常: 我使用的代码非常简单 我有,,和在我的目录中。 在我的服务器应用程序中,此代码可以在相同的库中正常工作。 问题答案: msgpack :可在Android上正常使用 msgpack-rpc :适用于Android,但有一个警告。 具体来说,您需要为API级别8(Android 2.2.1)添加以下

  • 我有一些用RNCryptor加密的图像文件,我想对它们进行解密,并将它们用作框架布局的背景。我浏览了示例文件,但我的应用程序force在一段时间后关闭,没有显示任何图像。我使用JNCryptor库 我将加密图像放入raw文件夹,如下所示: 这是我活动中的代码: 这个文件可以很好地iOS这个代码: 这里是logcat输出: 08-2819:52:11.720:E/AndroidRuntime(106

  • 我编写了一个JUnit测试,使用Mockito和PowerMock模拟一些类。我试图将其转换为cucumber测试,但静态的PowerMock特性不起作用。 两类相关cucumber的提取物: 虽然这段代码在JUnit测试中工作,但它在这里失败了--它进入了方法,该方法应该被模拟,然后通过在其中执行代码而失败。我试着加了几行: 对上述两个类(当然,我不能在类中使用,因为它已经有一个注释),但这不会

  • Ceph 文件系统可作为 Hadoop 文件系统( HDFS )的落地式替代品,本章描述了 Ceph 用于 Hadoop 存储的安装和配置过程。 依赖关系 CephFS 的 Java 接口 Hadoop 的 CephFS 插件 Important 当前要求 Hadoop 1.1.x 稳定版系列。 安装 在 CephFS 上使用 Hadoop 有三个必要条件。首先,必须有一个运行的 Ceph 。建设

  • java.lang.NoSuchMethodError:在步骤中找不到这样的DSL方法“PublishOversh”[archive,bat,build,catchError,checkout,deleteDir,dir,dockerFingerprintFrom,Docker FingerPrintRun,echo,emailext,EmailExtrecients,envVarsForTool

  • 问题内容: 我希望程序在2秒后显示。 然后我在之后添加。 但是我不知道为什么程序会停止显示,而不显示,并且“ show test”消息可以成功打印出来 问题答案: 简短的答案,不要。 Swing是一个单线程框架,这意味着阻止事件调度线程的任何事物都将阻止它更新UI或处理任何新事件(使您的UI看起来像是被挂起了)。 当然,您可以使用,但Swing也不是线程安全的。这意味着必须在事件分发线程的上下文内