- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在为大约 10 个模型构建一些抽象模型。我需要以某种方式使 1 个字段未在抽象模型中声明,但必须在继承模型中声明。怎么做?有什么方法可以使用 NotImplementedError
吗?
最佳答案
如果不深入研究 Django,恐怕没有一种简单的方法可以实现这一点。
主要原因是Field
name "hiding" is not permitted在 Django 。这意味着如果你想在基础抽象类中声明一个抽象属性,它是一个Field
。例如,与正常的 Python 类继承范例相反,您将无法在子类中重写它。引用文档:
In normal Python class inheritance, it is permissible for a child class to override any attribute from the parent class. In Django, this is not permitted for attributes that are Field instances (at least, not at the moment). If a base class has a field called author, you cannot create another model field called author in any class that inherits from that base class.
Overriding fields in a parent model leads to difficulties in areas such as initializing new instances (specifying which field is being initialized in Model.init) and serialization. These are features which normal Python class inheritance doesn't have to deal with in quite the same way, so the difference between Django model inheritance and Python class inheritance isn't arbitrary.
This restriction only applies to attributes which are Field instances. Normal Python attributes can be overridden if you wish. It also only applies to the name of the attribute as Python sees it: if you are manually specifying the database column name, you can have the same column name appearing in both a child and an ancestor model for multi-table inheritance (they are columns in two different database tables).
Django will raise a FieldError if you override any model field in any ancestor model.
但是,如果该属性不是 Field
实例(尽管这种可能性很小),您将能够通过使用 @property
实现您想要的效果。装饰器。这样的事情应该有效:
class Person(models.Model):
def __init__(self, *args, **kwargs):
super(Person, self).__init__(*args, **kwargs)
self.last_name
first_name = models.CharField(max_length=30)
@property
def last_name(self):
raise NotImplementedError
class Meta:
abstract = True
class Student(Person):
home_group = models.CharField(max_length=5)
last_name = "Doe" # "models.CharField()" will not work!
class BadStudent(Person):
home_group = models.CharField(max_length=5)
# "NotImplmentedError" will be raised when instantiating BadStudent()
您可能还想看看 abc.abstractproperty
.不过,我不确定它如何与 Django 的模型继承一起使用。
关于python - Django - 如何使实现字段成为必需的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993609/
内部 TransactionScope 将哪个事务作为环境事务? using ( var t1 = new TransactionScope( TransactionScopeOption.Requi
我需要匹配以下模式:N.N.N 324324.234324.234324 匹配,以及 1.1.1 I have the following pattern: (\d*\.\d*\.\d*) 问题是,它
这个问题在这里已经有了答案: HTML5 required attribute not working (2 个答案) 关闭上个月。 我最近为我创建了一个网页来学习更多关于 HTML 的知识,我发现
我在 NgForm 中有以下字段: 0'" /> Dependency is required 问题是这个字段总是需要的,不管 [required]相关条件depSelected>0 . d
我有一个模型类,其中包含几个必填字段: public class UserMetadata { [Required(ErrorMessage = "Please enter a name.")]
我有一张预订表格,需要验证。某些字段的启用/禁用取决于之前选择的选项。我的问题是,我无法提交禁用字段的表单,因为它等待来自空字段的“有效”输入数据。 是否有一种方法可以仅在启用字段集时启用/禁用这些字
如何为textarea设置两个属性(默认文本,点击后隐藏,必填)? Default text HTML“认为”默认文本是我的输入。我该如何修复它?谢谢大家。 最佳答案 如果您不介意兼容性,简单
我是编码新手,所以这可能是一个非常简单的问题。 编译时出现错误: GradeAnalyzer.java:49: error: method getAverage in class GradeAnaly
我有一个带有 2 个输入字段的 from:手机和电话。我希望至少需要其中一个字段,以便可以提交表单。要么您输入手机号码,不再需要电话输入,要么反之亦然。 我发现 Jquery 验证器有条件语句,
看看下面的代码,我正在使用 required(System.ComponentModel.DataAnnotations) 命名空间,但它一直向我显示红色波浪线,并显示无法找到“type or nam
所以我有一个 knockout 原型(prototype),您可以在其中动态添加输入,然后设置每个设置。将其视为表单生成器就是这样。然而,我注意到禁用和必需的效果不太好。它将值设置为禁用或必需,但是当
我正在使用 Entity Framework 的表拆分功能来拆分我的实体数据模型,如下所示: +--------+ +--------------+ | News | | NewsI
我有 3 个关于 TransactionScopeOption 的问题。Required 把我逼疯了,我无法在网上找到他们的答案。 A. 我很难思考什么时候我必须在现实中编写这段代码?为什么我不应该将
public static int biggestArrayGap(int []a, int n) { int biggestGap = Math.abs(a[1]-a[0]); for (i
我真的发现 django 表单集令人困惑。 我尤其对以下我不太了解的概念有疑问: The formset is smart enough to ignore extra forms that were
在我的 Angular v6 应用程序中,我尝试显示一个下拉列表,并根据 bool 值将其设置为必需,该 bool 值设置在复选框的值上。以下是我的模板中的代码片段(includeModelVersi
我正在使用jquery validation插入。当我使用 required( dependency-expression ) 时,我注意到 required( dependency-expressi
代码: ArrayList marks = new ArrayList(); String output = "Class average:" + calculateAverage() + "\
static void sort (Textbook [ ] info, int numEntries) { long tempIsbn = 0; String tempTitle =
在我的 Angular v6 应用程序中,我尝试显示一个下拉列表,并根据 bool 值将其设置为必需,该 bool 值设置在复选框的值上。以下是我的模板中的代码片段(includeModelVersi
我是一名优秀的程序员,十分优秀!