Django外键,ID集

2024-06-02 12:26:55 发布

您现在位置:Python中文网/ 问答频道 /正文

假设模型是这样构造的:

class Worker(models.Model):
    name_char = models.CharField(max_length=4,null=True, blank=True)
    body_parts_mtm = models.ManyToManyField('BodyPart')

class Job(models.Model):
    job_name = models.CharField(max_length=6,unique=True)  
    job_reference_mtm = models.ManyToManyField('JobReferenceCode') 

class JobReferenceCode(models.Model):
    job_ref_char = models.CharField(max_length=13)
    worker_mtm = models.ManyToManyField('Worker')

class BodyPart(models.Model):
    body_part_name_text = models.TextField()

class MembersSimilarity(models.Model):
    similarity_score_float = models.FloatField(max_length=10)
    worker_fk = models.ForeignKey(Worker,on_delete=models.CASCADE)
    job_fk = models.ForeignKey(Job,on_delete= models.CASCADE)

    #not sure if I need this field to do what I want but here it is:
    bodypart_fk = models.ForeignKey(BodyPart,on_delete=models.CASCADE)

在我的网站上,用户可以查找JobReference,我想给出一个具体的输出:一个由(Job,[BodyParts])组合控制行数的表。在

为了做到这一点,在我的观点中,我认为解决这个问题的方法是建立一个具有这种结构的函数(简化):

^{pr2}$

有可能过滤像这样的东西吗?我需要区分工人有具体的身体部位和它的每一个工作。我在寻找如何做到这一点,但没有找到任何东西,我问这个问题也是为了征求您对如何优化我的视图功能的意见(例如,循环以构建独特的车身部件ID集…)

我知道这个问题是相当巨大的,但是我从现在开始就在挣扎,尝试了很多不同的模型结构。。。任何帮助都不只是感激,谢谢!在


Tags: nametruemodelmodelsjoblengthmaxclass
1条回答
网友
1楼 · 发布于 2024-06-02 12:26:55

我不知道我是否必须这样做,但是在@Mani的帮助下,我找到了寻找的地方,找到了这个主题:Davor Lucic's answer并最终解决了我的问题。在

在我的例子中,我尝试了他的所有答案,最后选择了一个.filter循环。 根据我的问题,我解决了这个问题:

pre_queryset = #a query set of MembersSimilarity
post_queryset = pre_queryset.filter(job_fk=1,bodypart‌​_fk=1 AND 2)

假设我有一个body_-part_-fk列表,并希望过滤pre-_-queryset:

^{pr2}$

相关问题 更多 >