Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

more than 1 foreign key

I have the following models: 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',) 

When I try to click add button for worlds in admin page it shows me the following error:

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

I think it's something to do with inline. What can it be?

like image 659
alexarsh Avatar asked Mar 09 '10 12:03

alexarsh


1 Answers

Django doesn't know which of the two foreign keys (parent and world) is to be inlined using the ElementInline.

class ElementInline(admin.TabularInline):     model = Element     fk_name = 'parent' #or 'world', as applicable.     extra=1 
like image 71
Amarghosh Avatar answered Sep 20 '22 13:09

Amarghosh