Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从外键的反向验证对象

如何从外键的反向验证对象
EN

Stack Overflow用户
提问于 2019-12-17 08:24:05
回答 2查看 339关注 0票数 1

我有两个通过ForeignKey连接在一起的对象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Question(models.Model):
    text = models.Charfield()

class AnswerOption(models.Model):
    text = models.Charfield()
    question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name="options")

当在管理界面中创建Question时,我为AnswerOptions使用了一个内联表单,以便同时创建它们。我想在Question上执行一些验证,它需要访问新的AnswerOptions才能做出决定。

我已经向clean添加了一个Question方法,但是options属性是空的。

验证Question的正确方法是什么?

编辑清楚地表明,Question需要访问AnswerOptions才能验证所有内容。

编辑添加了对在管理界面中使用InlineForm for AnswerOptions的显式引用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-19 05:58:19

这就是我发现的:

在管理接口中创建内联表单时,Django创建一个Formset来处理多个表单。(示例这里与我的用例相同)

Formsets和其他窗体一样有一个clean()方法,它们有一个forms属性来访问子窗体。就像普通表单一样,它们有一个instance属性,该属性引用“基类”,而单个表单具有一个instance属性,它为您提供新提交的数据的一个实例。

把这一切结合在一起:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# models.py

class Question(models.Model):
    text = models.Charfield()

class AnswerOption(models.Model):
    text = models.Charfield()
    question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name="options")

# admin.py

from django.contrib import admin
from django.forms.models import BaseInlineFormSet

class AnswerOptionFormset(BaseInlineFormset):
    def clean(self):
        super().clean() # See note in docs about calling this to check unique constraints

        #self.instance -> Question, with all the newly submitted, and validated, data.
        #self.forms -> iterator over all the submitted AnswerOption forms
        #for f in self.forms:
        #    f.instance -> instance of AnswerOption containing the new validated data

        #Note: self.instance.options will refer to the previous AnswerOptions

        #raise ValidationError for anything that is wrong.
        #It is also possible to modify the data in self.instance or form.instance instead.


class AnswerOptionInline(admin.TabularInline):
    formset = AnswerOptionFormset # note formset on AnswerOption NOT QuestionAdmin 


class QuestionAdmin(admin.ModelAdmin):
    inlines = [AnswerOptionInline]
票数 1
EN

Stack Overflow用户

发布于 2019-12-17 13:30:04

我会通过Django表单来完成这个任务,它有一个更健壮的验证接口。表单上的clean方法是进行这种类型验证的地方。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# forms.py 

from django import forms
from .models import Question

class QuestionForm(forms.Form):
    text = models.Charfield()

    class Meta:
        model = Question

    def clean(self):
        options = self.cleaned_data['options']
        if not option.are_ok:
          raise forms.ValidationError
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# admin.py

from django import admin
from .forms import QuestionForm


class QuestionAdmin(admin.ModelAdmin):
    form = QuestionForm

...

来自医生们

表单子类的clean()方法可以执行需要访问多个表单字段的验证。这是您可能会进行检查的地方,例如“如果字段A被提供,字段B必须包含一个有效的电子邮件地址”。如果愿意,此方法可以返回一个完全不同的字典,该字典将用作cleaned_data。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59378296

复制
相关文章
Java中常见的异常类型
类格式错误。当Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。
JanYork_简昀
2022/04/02
2.3K0
Java---线程多(工作内存)和内存模型(主内存)分析
转载自 https://www.cnblogs.com/chihirotan/p/6486436.html
allsmallpig
2021/02/25
2K0
JDK源码解析之 java.lang.Error
错误。是所有错误的基类,用于标识严重的程序运行问题。这些问题通常描述一些不应被应用程序捕获的反常情况。
栗筝i
2022/12/01
6280
Java-线程中的异常
给出以下例子,我想问题是线程t1运行期间抛出的异常能够被捕获吗?(这是一个相当好的问题~)
Fisherman渔夫
2020/02/19
1.5K0
cdn节点访问失败,源站测试正常,节点异常?
cdn节点测试访问异常,出现空响应,直接访问源站正常,这里看起来像是节点出现异常。
任雯霄
2020/12/30
3.8K0
java主线程捕获子线程中的异常
如果想要在主线程中捕获子线程的异常,我们需要使用ExecutorService,同时做一些修改。
Java架构师必看
2021/05/14
3K0
java主线程捕获子线程中的异常
java高级用法之:JNA中的Function
在JNA中,为了和native的function进行映射,我们可以有两种mapping方式,第一种是interface mapping,第二种是direct mapping。虽然两种方式不同,但是在具体的方法映射中,我们都需要在JAVA中定义一个和native方法进行映射的方法。
程序那些事
2022/05/17
5710
Java面试系列9
java中的保留字,现在没有在java中使用。 ✎二、必须要知道的运行时异常 ArithmeticException 是出现异常的运算条件时,抛出此异常。 例如,一个整数“除以零”时,抛出此类
Java帮帮
2018/03/19
2K0
winform 多线程中ShowDialog()步骤无效的解决办法
private void Form1_Load(object sender, EventArgs e) { Thread thread = new Thread(remind); thread.IsBackground = true; thread.Start(); } private void remind() { while (true) { string h = "0"; string m = "23";
跟着阿笨一起玩NET
2018/09/19
1.3K0
Java跨语言调用,使用JNA访问Java外部接口
先说JNI(Java Native Interface)吧,有过不同语言间通信经历的一般都知道,它允许Java代码和其他语言(尤其C/C++)写的代码进行交互,只要遵守调用约定即可。首先看下JNI调用C/C++的过程,注意写程序时自下而上,调用时自上而下。
朝雨忆轻尘
2019/06/18
4.6K0
java高级用法之:JNA中的Structure
前面我们讲到了JNA中JAVA代码和native代码的映射,虽然可以通过TypeMapper来将JAVA中的类型和native中的类型进行映射,但是native中的数据类型都是基础类型,如果native中的数据类型是复杂的struct类型该如何进行映射呢?
程序那些事
2022/05/09
1.9K0
java高级用法之:JNA中的Structure
前面我们讲到了JNA中JAVA代码和native代码的映射,虽然可以通过TypeMapper来将JAVA中的类型和native中的类型进行映射,但是native中的数据类型都是基础类型,如果native中的数据类型是复杂的struct类型该如何进行映射呢?
程序那些事
2022/05/17
6640
java高级用法之:JNA中的Function
在JNA中,为了和native的function进行映射,我们可以有两种mapping方式,第一种是interface mapping,第二种是direct mapping。虽然两种方式不同,但是在具体的方法映射中,我们都需要在JAVA中定义一个和native方法进行映射的方法。
程序那些事
2022/05/06
1K0
java高级用法之:JNA中的回调
什么是callback呢?简单点说callback就是回调通知,当我们需要在某个方法完成之后,或者某个事件触发之后,来通知进行某些特定的任务就需要用到callback了。
程序那些事
2022/05/10
1.5K0
java中的异常总结
一般面试中java Exception(runtimeException )是必会被问到的问题
哲洛不闹
2018/09/19
1.4K0
Java多线程中的内存可见性
分为主内存和线程内存,当线程与其他线程共享一个变量时,便会把主内存的变量复制到线程内存中去。当发生对变量的修改时,会同步到主内存,主内存再同步到其他线程内存中去。
zhangheng
2020/04/28
5020
异常、线程
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100192.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/29
7660
异常、线程
RuntimeException和Exception区别
Java设置了异常,旨在鼓励将方法中可能出现的异常告知给使用此方法的程序员(你和我!)。当然了,这种方法是比较优雅的,让我们确切的知道是在哪里出了错,并提供了异常捕获。本篇文章主要对Java中的异常进行介绍与区分。
全栈程序员站长
2022/09/15
1.1K0
RuntimeException和Exception区别
WPF中UI元素跨线程访问
dotnet中线程资源独占UI元素,不能跨线程访问,可以通过Dispatcher.Invoke的方式调用,但实际处理还是UI线程中,任务量比较大的数据会增加线程的处理压力。 其实还有一种做法,可以通过设置UI元素为只读的方式,跨线程访问。 如BitmapSource跨线程访问,可以调用Freeze设置元素为只读模式。 Aforge.net跨线程传递图像资源,如下:
sofu456
2019/07/09
1.1K0
java高级用法之:JNA中的回调
什么是callback呢?简单点说callback就是回调通知,当我们需要在某个方法完成之后,或者某个事件触发之后,来通知进行某些特定的任务就需要用到callback了。
程序那些事
2022/05/17
8950

相似问题

JNA无效内存访问

13

JNA:无效内存访问

11

JNA:无效内存访问

18

JNA中的无效内存访问

16

映射JNA中的COM接口方法无效内存访问异常

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文