Django 内联模型管理过滤器外部字段

标签 django django-models django-admin foreign-keys inline

我有以下问题。

我有 3 个模型:

class Deal(models.Model):
    name = models.CharField(max_length=80)

class Site(models.Model):
    name = models.CharField(max_length=80)
    deal = models.ForeignKey(Deal)

class Picture(models.Model):
    title = models.CharField(max_length=80)
    deal = models.ForeignKey(Deal)
    site = models.ForeignKey(Site)

我想使用 Site & Picture 内联管理模型制作 Deal Admin:
class SiteInline(admin.StackedInline):
    model = Site
    extra = 1


class PictureInline(admin.StackedInline):
    model = Picture
    extra = 1


class DealAdmin(admin.ModelAdmin):
    inlines = [
        SiteInline,
        PictureInline,
    ]

我想要做的是,当我选择“图片管理中的站点”时,它只显示属于我正在查看的当前交易的站点(如果我正在更新 - 不创建新的)。

我想让它在管理员中工作,我花了很多时间在网上搜索,但找不到任何有用的东西,请帮忙!

我试图这样做,但我不知道如何访问父模型实例以获取交易 ID:
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):

    if db_field.name == 'site':
        kwargs['queryset'] = Site.objects.filter(deal__id=1)

    return super(PictureInline, self).formfield_for_foreignkey(db_field, request=None, **kwargs)

最佳答案

在 DTing 的变体中,我看到了问题 - self.instance.deal 在编辑模式下设置,但在添加模式下未设置

我想,你应该写

try:        
    self.fields['site'].queryset = Site.objects.filter(deal=self.instance.deal)
except:
    self.fields['site'].queryset = Site.objects

反而

关于Django 内联模型管理过滤器外部字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18304932/

相关文章:

python - Django-PayPal 将信号连接到 Action

mysql - Django raw() 查询,WHERE 子句中的计算字段

python - 防止使用相同的凭据进行多次登录

python - 数据库查询结果作为 Django 模型字段的默认值?

Django 管理员 : How do I know when the user is editing an existing object or saving a new object?

python - Django 1.4.1 Admin CSS 未显示

django - 无法杀死 gunicorn 进程

Django 、 celery 和昆布 : how to allow pickle?

Django:在内存中建立关系而不保存到数据库

python - 在 Django Admin 中保留过滤器