首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django必须使用ForeignKey才能共享约束

Django必须使用ForeignKey才能共享约束
EN

Stack Overflow用户
提问于 2010-07-06 00:02:14
回答 2查看 142关注 0票数 2

我有以下模型:

代码语言:javascript
复制
class Program(models.Model):
    name = models.CharField(max_length = 128)
    def __unicode__(self):
        return self.name
class Cheat(models.Model):
    program = models.ForeignKey(Program)
    shortcut = models.CharField(max_length = 64)
    description = models.CharField(max_length = 512)
    def __unicode__(self):
        return u"(%s) - %s" % (self.shortcut, self.description)
class Category(models.Model):
    #program = models.ForeignKey(Program)
    name = models.CharField(max_length = 128)
    def __unicode__(self):
        return self.name
class Sheet(models.Model):
    program = models.ForeignKey(Program)
    name = models.CharField(max_length = 128)
    def __unicode__(self):
        return self.name
class CategorizedCheat(models.Model):
    order = models.IntegerField(unique = True)
    sheet = models.ForeignKey(Sheet)
    cheat = models.ForeignKey(Cheat)
    category = models.ForeignKey(Category)
    def __unicode__(self):
        return unicode(self.cheat)

在管理员中,我想要显示一个带有CategorizedCheats内联的工作表。问题是,我不能只有作弊,这是有关同一程序作为工作表。有没有办法用Sheet.program过滤这些内容?还是我的模型出了什么问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-06 03:24:25

在Django的admin中过滤ForeignKeys中的可用对象时,正确的答案几乎总是ModelAdmin.formfield_for_foreignkey:

http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey

那里的文档几乎完全解释了如何做你想做的事情。希望这能有所帮助!

票数 1
EN

Stack Overflow用户

发布于 2010-07-06 16:45:05

以下是最终的解决方案,感谢Gabriel:

代码语言:javascript
复制
def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == "cheat":
        kwargs["queryset"] = Cheat.objects.filter(program=Sheet.objects.get().program)
        return db_field.formfield(**kwargs)
    return super(CategorizedCheatAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

诀窍是使用Sheet.objects.get().program,这是我所缺少的信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3180838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档