Django - 使用外键从另一个模型引用数据

时间:2014-03-31 13:37:37

标签: python django

我是Django的新手所以请告诉我,我是不是在正确的轨道上。 我有一个Django项目,我正在构建,只是想问一下从一个模型中检索数据并在另一个模型中使用它的正确Django方法是什么。

我有一个for循环来为变量分配必需的字段,但我正在寻找一个更清晰的解决方案,如果存在,则使用外键。

以下是相关代码的示例:

#MODELS

class Class1(models.Model):
    tag_number = models.CharField(max_length = 300, null = True, blank = True)
    example1 =  models.CharField(max_length = 300, null = True, blank = True)
    example2 =  models.CharField(max_length = 300, null = True, blank = True)

class Class2(models.Model):
    tag = models.ForeignKey(Class1, related_name = 'tag_foreignkey')
    example3 =  models.CharField(max_length = 300, null = True, blank = True)
    example4 =  models.CharField(max_length = 300, null = True, blank = True)



#VIEWS - This view is for Class2 but referencing fields from Class1

tag_number = str(instrumentform.cleaned_data['tag'])
query_results = Class1.objects.filter(tag_number = tag_number)
for query_result in query_results:
        example5 = query_result.example1
        example6 = query_result.example2

以上是有效的,但我认为它不是Django的做事方式,也不是利用外键。

如果有人能给我一个正确方向的推动,那将非常感激。

2 个答案:

答案 0 :(得分:1)

然而,百分之百不知道你想要什么,因为那里有一些缺失的信息。 对于Class1,您应该使用外键存储标记来完成对Class2所做的操作。

对于底部的代码,有一种简单的方法。 (假设您使用了外键)

tag_number = int(instrumentform.cleaned_data['tag'])
for query_result in Class1.objects.filter(tag = tag_number).values_list('example1', 'exmaple2'):
    example5, example6 = query_result

答案 1 :(得分:0)

我不确定你在这里要做什么。我想象的是PstCalc = Class1 不过,如果你有

c1 = Class1()
c2 = Class2()
c3 = Class2()
and
c2.tag = c1
c3.tag = c1

使用你想要的外键:

c1.class2_set = (c2, c3) <- this would be a queryset, not a list
c2.tag = c1 => c2.tag.example1 = c1.example1

...希望我让自己明白:)