我们目前正在运行以下配置以避免其他问题.
所以对于这个问题:让我们假设这是必须的,我们不能改变模型部分.
一开始我们有以下模型:
class A(Model):
b = ForeignKey(B)
... set of fields ...
class B(Model):
...
Run Code Online (Sandbox Code Playgroud)
然后我们添加了这样的东西:
class AVer2(Model):
b = ForeignKey(B)
... ANOTHER set of fields ...
Run Code Online (Sandbox Code Playgroud)
假设一个对象type B只能由两个A或AVer2 两个引用:
有没有办法在B上运行查询,它将在运行时返回查询结果中引用它的正确对象类型(并且查询中包含两种类型)?
您可以假设类型B的对象包含有关谁引用它的信息.
我试图避免代价高昂的整个系统代码更改.
编辑:显然,我的问题不明确.所以我会尝试更好地解释它.我得到的答案很棒,但显然我错过了我的问题中的一个关键点,所以在这里.假设我有上面的模型B,我得到一些对象:
b_filter = B.objects.filter(some_of_them_have_this_true=True)
Run Code Online (Sandbox Code Playgroud)
现在,我希望得到A和AVer2中的一个字段,其中一个过滤器放入一个值列表中.所以例如,我想得到一个名为"MyVal"的字段(A和AVer2都有它)我不关心实际类型是什么.所以我想写一些像:
b_filter.values(['a__myval', 'aver2__myval'])
Run Code Online (Sandbox Code Playgroud)
并得到类似以下内容的回报:[{'myval':}]相反,我现在得到[{'a__myval':,'aver2__myval':无}]
我希望它更清楚.
谢谢!
我可能在这里遗漏了一些基本的东西,但仍然很感谢你在理解这一点时给予的帮助.所以我写了以下简单的多线程程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
// List<int> outcome = new List<int>();
Test t = new Test();
Thread thread1 = new Thread(new ThreadStart(t.call1));
Thread thread2 = new Thread(new ThreadStart(t.call2));
thread1.Start();
thread2.Start();
Thread.Sleep(3000); //Give enough time for threads to end
Console.Write("{0},", t.mSum);
t.mSum = 0;
}
}
class Test
{
public int mSum = 0;
public void call1()
{
//lock (this)
//{
for …Run Code Online (Sandbox Code Playgroud)