【问题标题】:more than 1 foreign key超过 1 个外键
【发布时间】:2010-03-09 12:33:54
【问题描述】:

我有以下型号:http://slexy.org/view/s20T8yOiKZ

from mxutils.cms_services import generate_secid
from django.db import models
from django.contrib import admin
from django import forms

class World(models.Model):
    title = models.CharField(max_length=150)
    secid = models.SlugField(max_length=1000, editable=False)
    elements = models.ManyToManyField("Element", related_name='elements', blank=True, null=True)
    metadata = models.OneToOneField("Category_metadata", blank=True, null=True)
    def save(self):
        if not self.pk:
            super(World, self).save()
            self.secid = generate_secid(self.title, self.pk, World.objects.all())
        return super(World, self).save()
    def __unicode__(self):
        return "%s" % self.title

class Element(models.Model):
    parent = models.ForeignKey(World, related_name='element_parent')
    world = models.ForeignKey(World, related_name='world', blank=True, null=True)
    item = models.ForeignKey("Item", blank=True, null=True)
    value = models.DecimalField(default=0, max_digits=5, decimal_places=3)
    def save(self):
        if self.world and self.item:
            return None
        elif not self.world and not self.item:
            return None
        else:
            return super(Element, self).save()
    def __unicode__(self):
        if self.world:
            return "%s" % self.world.title
        else:
            return "%s" % self.item.title

class ElementInline(admin.TabularInline):
    model = Element
    extra=1

class WorldAdmin(admin.ModelAdmin):
    inlines = [ElementInline,]
    list_display = ('title',)
    ordering = ['title']
    search_fields = ('title',)

当我尝试在管理页面中单击添加世界按钮时,它显示以下错误:

“cms_sample.world_models.Element”类有多个“cms_sample.world_models.World”类的外键。

我认为这与内联有关。 会是什么?

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    Django 不知道要使用 ElementInline 内联两个外键(父键和世界键)中的哪一个。

    class ElementInline(admin.TabularInline):
        model = Element
        fk_name = 'parent' #or 'world', as applicable.
        extra=1
    

    【讨论】:

    • parent(或world)需要用引号引起来
    猜你喜欢
    • 1970-01-01
    • 2017-10-30
    • 2017-11-07
    • 2013-08-08
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多