Django如何获得与模型相关的所有外键的列表?

2024-09-29 19:36:07 发布

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

型号.py

class DataSource(VoteModel, models.Model):
​
    dataset_request = models.ForeignKey(
        'DatasetRequest', on_delete=models.CASCADE, blank=True, null=True)
    file = models.FileField(upload_to='datasource_files/')
    file_size = models.BigIntegerField(blank=True, null=True)
​
    title = models.CharField(max_length=255, default="Untitled")
    description = models.TextField(blank=True, null=True)
    slug = models.SlugField(blank=True, null=True)
​
    is_public = models.BooleanField(default=True)
    creator = models.ForeignKey(User, on_delete=models.CASCADE)
​
    is_csv_or_tsv = models.BooleanField(null=True)
​
    thumbnail = models.ImageField(
        upload_to="datasource_thumbnails/", blank=True, null=True)
​
    date_uploaded = models.DateTimeField(
        auto_now_add=True, blank=True, null=True)
​
    comments = GenericRelation(Comment)
​
​
class DatasetRequest(VoteModel, models.Model):
    reward = models.DecimalField(
        decimal_places=2, max_digits=10)  # if 0, 1 medal
    title = models.CharField(max_length=255)
    description = models.TextField(blank=True, null=True)
    slug = models.SlugField(blank=True, null=True)
    is_public = models.BooleanField(default=True)
    creator = models.ForeignKey(User, on_delete=models.CASCADE)
    thumbnail = models.ImageField(
        upload_to="datasetrequest_thumbnails/", blank=True, null=True)
​
    best_dataset_entry = models.ForeignKey(
        DatasetEntry, on_delete=models.CASCADE, blank=True, null=True)
    date_uploaded = models.DateTimeField(
        auto_now_add=True, blank=True, null=True)
​
    is_paid = models.BooleanField(default=False)
​
    comments = GenericRelation(Comment)
​
    qa_testers = models.ManyToManyField(User, related_name='qas')

使用以下设置,如何获取给定数据源的所有DatasetRequests?dataset\请求(DatasetRequest)是DataSource中的外键。DatasetRequest中没有多对多,尽管每个DatasetRequest都有数据源。我需要多对多吗


Tags: totruedefaultisonmodelsdeletenull
1条回答
网友
1楼 · 发布于 2024-09-29 19:36:07

您可以对模型的向后关系使用访问器

Django documentation

Django also creates API accessors for the “other” side of the relationship – the link from the related model to the model that defines the relationship. For example, a Blog object b has access to a list of all related Entry objects via the entry_set attribute: b.entry_set.all().

它使用在ForeignKey字段中指定的related_name字段,但默认情况下设置为模型名称

在您的示例中,您可以执行以下操作:

data_source = DataSource.objects.get(pk=1) # or whatever
data_requests = data_source.datarequest_set.all()

现在data_requests将是所有QuerySet对象的DataRequest,这些对象的外键指向data_source

相关问题 更多 >

    热门问题