Django:带有limit_choices_to的外键选项在管理中不区分

c7rzv4ha  于 2023-01-14  发布在  Go
关注(0)|答案(2)|浏览(125)

我在Django 1.3中有以下模型:

class A(models.Model):
    # fields

class RelatedToA(models.Model):
    a = models.ForeignKey(
        A, 
        related_name="related_set"
    )
    # fields

class B(models.Model):
    a = models.ForeignKey(
        A,
        limit_choices_to={'related_set__isnull'=False}
    )

现在,在B的ModelAdmin中,下拉列表中有A的每个示例的多个条目。有没有办法在模型级别上使选择不同?

n53p2ov0

n53p2ov01#

你可以通过formfield_for_foreignkey传递一个自定义的查询来计算下拉菜单中的外键值,参见https://docs.djangoproject.com/en/dev/ref/contrib/admin/中的formfield_for_foreignkey。

lyr7nygr

lyr7nygr2#

为Django管理员以及我们项目中的任何地方从外键表中检索特定的值。这是Django ORM中非常强大的选项。您可以尝试一下。祝您好运。

class A(models.Model):
    """ 
        Purpose: create model A
    """

    name = models.CharField('name', max_length=256)
    short_code = models.CharField('shortcode of geo area', max_length=16, null=True, blank=True) 

    def __str__(self):

        return f'{self.name}/{self.short_code}'

    def __name__(self):
        return f'{self.name}'

    class Meta:
        verbose_name = "A detail"
        verbose_name_plural = "A details"

class B(models.Model):
    """ 
        Purpose: create B table
    """

    name = models.CharField('organization name', max_length=128)
    model_a = models.ForeignKey(A, on_delete=models.CASCADE, related_name='a_related_info', null=False, limit_choices_to={'name': 'James Bond', 'short_code': 007})  

    def __str__(self):

        return f'{self.name}/{self.model_a.name}'

    class Meta:
        verbose_name = "B Detail"
        verbose_name_plural = "B Details"

相关问题