2010-03-09 18 views
33

Ich habe folgende Modelle: http://slexy.org/view/s20T8yOiKZmehr als 1 Fremdschlüssel

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',) 

Wenn ich versuche Taste in Admin-Seite für Welten zu klicken hinzufügen es zeigt mir folgende Fehlermeldung:

class 'cms_sample.world_models.Element' has more than 1 ForeignKey to class 'cms_sample.world_models.World'.

Ich denke, Es hat etwas mit Inline zu tun. Was kann es sein?

Antwort

75

Django weiß nicht, welcher der beiden Fremdschlüssel (Eltern und Welt) unter Verwendung der ElementInline inline eingezeichnet werden soll.

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

"eltern" (oder "world") muss in Anführungszeichen –

+0

@Daniel thanks, behoben werden. – Amarghosh