#20753: Beginner confused for MultiValueDictKeyError, where the error comes 
from?
--------------------------------+------------------------------------
     Reporter:  adam.pahlevi@…  |      Owner:  nobody
         Type:  Bug             |     Status:  new
    Component:  contrib.admin   |    Version:  1.4
     Severity:  Normal          |   Keywords:  MultiValueDictKeyError
 Triage Stage:  Unreviewed      |  Has patch:  0
Easy pickings:  0               |      UI/UX:  0
--------------------------------+------------------------------------
 I am new to Django and would like to try it for my thesis project.
 However, I found an error which is MultiValueDictKeyError when I try to
 save my model from the Django admin.

 I have 3 models in this case, which are: BSN (Business), LIN (Lines), ROT
 (Routes).

 BSN:
 {{{#!python
 class Bsn(models.Model):
     """The entity of business"""

     #the enum for business type
     BUSINESSTYPE = (
         ('bank', 'Bank'),
         ('barclub', 'Bar-Club'),
         ('carrental', 'Car rental'),
         ('church', 'Church'),
         ('clinic', 'Clinic'),
         ('cybercafe', 'Cybercafe'),
         ('exchange', 'Exchange'),
         ('festival', 'Festival'),
         ('fleamarket', 'Fleamarket'),
         ('hotel', 'Hotel'),
         ('mosque', 'Mosque'),
         ('police', 'Police'),
         ('primary', 'Primary'),
         ('restaurant', 'Restaurant'),
         ('secondary', 'Secondary'),
         ('shop', 'Shop'),
         ('sight', 'Sight'),
         ('transportation', 'Transportation'),
         ('uni', 'University')
     )

     bsnid = models.AutoField(primary_key=True)
     id = bsnid.__str__()
     bsnname = models.CharField("Business name", max_length=135,
 unique=True)
     bsntype = models.CharField("Business type", max_length=42,
 choices=BUSINESSTYPE)
     bsndesc = models.CharField("Description", max_length=135, blank=True)
     bsnparent = models.ForeignKey('self', null=True,
 db_column='bsnparent', blank=True)
     bsncoorx = models.DecimalField("Coordination X in Map", null=True,
 blank=True, max_digits=11, decimal_places=0)
     bsncoory = models.DecimalField("Coordination Y in Map", null=True,
 blank=True, max_digits=11, decimal_places=0)
     bsncoorn = models.DecimalField("Coordination N in Map", null=True,
 blank=True, max_digits=11, decimal_places=0)

     def __unicode__(self):
         return self.bsnname

     class Meta:
         db_table = u'bsn'
         verbose_name="Business"
         verbose_name_plural="Businesses"
 }}}

 Class LIN
 {{{#!python
 class Lin(models.Model):
     """model for the line"""
     linid = models.AutoField(primary_key=True)
     id = str(linid)
     linbsn = models.ForeignKey(Bsn, db_column='linbsnid')

     def __unicode__(self):
         return "Line " + self.linbsn.bsnname

     class Meta:
         db_table = u'lin'
         verbose_name = "Line"
 }}}

 And, the last but not least, ROT:
 {{{#!python
 class Rot(models.Model):
     rotid = models.IntegerField(primary_key=True)
     rotlin = models.ForeignKey(Lin, null=True, db_column='rotlinid',
 blank=True)
     rotfrom = models.ForeignKey(Trn, null=True, db_column='rotfrom',
 blank=True, related_name="rotfrom")
     rotto = models.ForeignKey(Trn, null=True, db_column='rotto',
 blank=True, related_name="rotto")
     rotkm = models.FloatField(null=True, blank=True)
     rottimemnt = models.IntegerField(null=True, blank=True)
     rotprice = models.FloatField(null=True, blank=True)
     rotisinterchange = models.BooleanField(default=False, null=False,
 blank=False, verbose_name="is interchange?")
     rotisactive = models.BooleanField(default=True, null=False,
 blank=False, verbose_name="is active?")
     rotdesc = models.CharField(max_length=225, blank=True)

     def __unicode__(self):
         if self.rotfrom is None:
             return "to " + str(self.rotto)
         elif self.rotto is None:
             return "from " + str(self.rotfrom)
         else:
             return "{0} to {1}".format(self.rotfrom.bsnid.bsnname,
 self.rotto.bsnid.bsnname)

     class Meta:
         db_table = u'rot'
         verbose_name = "Route"
 }}}

 The model are generated from inspectdb, and all is working when I try to
 save one by one manually; both from Django admin and from the Django
 console, and also from a Pilot.py file that I myself created to fill the
 database automatically whenever I want, with initial data.

 But, when I go to admin page for LIN, that itself is a 'child' of BSN and
 that itself is used to determine and show the ROT; I got the multivalued
 key error. I have tried to understand this error, but I lost myself. I
 have no one at hand to help except than the Django community here. So,
 please let me know where I am wrong at.

 Here are the Admin code.
 {{{#!python
 class RotAdmin(admin.ModelAdmin):
     """admin page for route"""
     fieldsets = [
         (None, {'fields': ['rotlin', 'rotfrom', 'rotto',
 'rotisinterchange', 'rotisactive']}),
         ("Distance", {'fields': ['rotkm', 'rottimemnt', 'rotprice']}),
         ("Description", {'fields': ['rotdesc']})
     ]
 admin.site.register(Rot, RotAdmin)

 class RotGridsTabular(admin.TabularInline):
     fields = ['rotfrom', 'rotto', 'rotkm', 'rottimemnt', 'rotprice',
 'rotisinterchange', 'rotisactive']
     model = Rot
     extra = 0

 class LinAdmin(admin.ModelAdmin):
     """admin page for line"""
     fields = ['linbsn']
     inlines = [RotGridsTabular]
 admin.site.register(Lin, LinAdmin)
 }}}

 Note: when I add the ROT record from the ROT admin, it works; when I add
 the ROT record from LIN admin, it crashes and throws the Multivalued key
 error.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/20753>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/065.60b92dbf06940c5718f6d4bfaf7df504%40djangoproject.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to