我使用python 3.4.5和Diango 2.0.2
我有两张带外键的表。出于某些原因,我需要使用2个表来存储这些数据。
我想生成一个包含以下信息的表。
program.name,program.program_id,program.filter(user = request.user.id).status(如果存在,如果不存在,则保持为NULL)
models.py
class Program(models.Model):
name = models.CharField(max_length=128, null=True, blank=True, default=None)
program_id = models.AutoField(primary_key=True)
class ProgramInfo(models.Model):
pid = models.ForeignKey(Program, on_delete=models.CASCADE, null=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
status = models.CharField(max_length=10, default=1003)
views.py
def program_list(request):
program = Program.objects.all()
return render(request, 'panel/program_list.html', {'program': program})
模板
{% for prog in program %}
<tr>
<td> {{ prog.name }} </td>
<td> {{ prog.program_id }} </td>
<td> {{ "program's status of existing user" }} </td>
</tr>
{% endfor %}
如何生成包含以下信息的表?
program.name,program.program_id,program.filter(user = request.user.id).status
我有2个解决方案,
(1)生成一个表并将其传递给模板
(2)将程序表发送到模板,并使用类似program.filter(user = request.user.id).status in&#34; td&#34;
但我不知道如何为这两种解决方案做到这一点。
表格应该是这样的
NameA, 123, yes
NameB, 234,
NameC, 345, no
NameD, 456,
NameE, 567, no
答案 0 :(得分:0)
ProgramInfo有一个指向Program实例的ForeignKey字段
pid = models.ForeignKey(Program, on_delete=models.CASCADE, null=True)
因此,您可以将多个ProgramInfo实例链接到单个Program实例。要检索该列表,只需使用:
program_instance = Program.objects.get(id=123)
# gives you the list of ProgramInfo instances:
programinfo_list = program_instance.programinfo_set
您可以在Django doc中找到有关Many to One relationships和Related objects的更多信息。仅供参考,instance.programinfo_set是RelatedManager(更通用的Manager的子类)。因此,它提供了查找此关系中包含的实例的接口。
如果您的模型之间只需要1对1的关系,请使用OneToOne字段:
pid = models.OneToOneField(Program, on_delete=models.CASCADE, null=True)