我有一个函数get_priority()
,它对父类(Chunk)中的所有对象进行排序,以获得最高'优先级'对象。现在我想将相关的子类对象提供给超类对象。
Django docs on Multi-Table Inheritance表明我可以使用子类的小写名称来完成此操作。例如,如果子类是Concept,我可以执行以下操作:
chunk = get_priority(Chunk.objects.all())
chunk.concept
但是,子类可以是概念,代码,公式或问题。是解决这个问题的唯一方法是使用每个子类的try / except,例如:
chunk = get_priority(Chunk.objects.all())
try:
object = chunk.concept
except:
pass
try:
object = chunk.code
except:
pass
# etc.
答案 0 :(得分:1)
我认为这不是检查它是什么类型的孩子的最佳方式,或者至少是最简单的方式。
我猜你有自定义方法来获取get_priority()
上的Chunk优先级(我个人会把它放在Chunk对象管理器上),所以为了得到正确的孩子,我会这样做:
chunk = get_priority(Chunk.objects.all())
object = None
for attr in ('concept', 'code', 'formula', 'problem'):
if hasattr(chunk, attr):
object = getattr(chunk, attr)
最后,您将让孩子进入object
变量,或None
如果没有孩子,那么您可以使用object
中的结果来抛出异常如果没有找到孩子或只是pass
。
答案 1 :(得分:0)
我推断出Chunk对象具有优先级属性。 如果是这样,为了对Chunks的查询集进行排序,您应该使用:
extension UITableViewCell {
func tableView() -> UITableView? {
var currentView: UIView = self
while let superView = currentView.superview {
if superView is UITableView {
return (superView as! UITableView)
}
currentView = superView
}
return nil
}
}
参考问题本身,请查看:Specifying the parent link field。您可以为所有子条目设置相同的引用名称。
另外我会建议你考虑django两个范围的建议:
作者和许多其他开发人员认为多表不一致,有时称为“具体的不安”,这是一件坏事。我们强烈反对使用它。