我有以下型号:
class Projects(models.Model):
id = models.IntegerField(primary_key=True, blank=True)
name = models.CharField(max_length=20, unique=True)
company = models.CharField(max_length=20, blank=True, null=True)
creation_date = models.DateField(auto_now_add=True, auto_now=False)
class Packages(models.Model):
id = models.IntegerField(primary_key=True, blank=True)
name = models.CharField(max_length=50)
extension = models.CharField(max_length=3)
gen_date = models.DateTimeField(auto_now_add=True, auto_now=False)
project = models.ForeignKey(Projects)
在我看来,对于主页功能,我试图显示最后一个包,以及相关项目。我不明白如何检索项目' field(FK):
try:
lastpackages = Packages.objects.reverse()[:1].get()
except Packages.DoesNotExist:
lastpackages = None
projectid = lastpackages.select_related('project_id')
project = Projects.objects.get(id=lastpackages.project)
return render(request, 'homepage.html', {'lastpackages': lastpackages,
'project': project})
事实上,我想要显示' projectname'对应于reverse
检索到的包。但项目和项目的线条不正确。我希望它足够清楚......
答案 0 :(得分:1)
很抱歉,但您的代码有点乱。您不需要单独查找Project
,django ORM会为您执行此操作:
package = Package.objects.order_by('-id')[0]
project = package.project
package.project
会为您提供与该软件包相关联的项目,无需使用id
进行查询。
有人建议:
id
,django会为您完成。reverse()
应与order_by()
语句一起使用。在您的情况下,使用id
查找最后一个条目会更容易,因为在django中id
会自动递增。答案 1 :(得分:1)
试试这个:
lastpackage = Packages.objects.reverse()[0]
project = lastpackage.project
答案 2 :(得分:0)
首先要记住的是lastpackages
是Packages
对象,而不是Queryset,所以这一行是错误的:
projectid = lastpackages.select_related('project_id')
它应该返回AttributeError: 'Packages' object has no attribute 'select_related'
关于您的问题,一旦您拥有Packages
个对象,就可以获得相应的项目ID:
lastpackages.project.pk
如果需要,还有完整的Projects
对象:
lastpackages.project