Opened 9 years ago

Closed 8 years ago

#1383 closed defect (worksforme)

ManyToManyField to a class with a OneToOneField fails

Reported by: mir@… Owned by: adrian
Component: contrib.admin Version: 0.91
Severity: normal Keywords: OneToOneField
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:

Description

This refers to django 0.91.

Under the following circumstances, the admin pages for class C fail on update:

class A(meta.Model):

name = meta.StringField(maxlength=60)

class B(meta.Model):

a = meta.OneToOneField(A)

class C(meta.Model):

b = meta.MultiToMultiField(B)

Inserting works, but as soon as you update, there's a bug in the following line:

file core/meta/init.py, lines 1139-1140

def method_set_many_to_many(rel_field, self, id_list):

current_ids = [obj.id for obj in method_get_many_to_many(rel_field, self)]


Since B is a "child" in a OneToOneField, it does not get an "id" attribute (instead, the primary key is in the object attribute b_id).

Change History (1)

comment:1 Changed 8 years ago by Gary Wilson <gary.wilson@…>

  • Resolution set to worksforme
  • Status changed from new to closed
  • Summary changed from MultiToMultiField to a class with a OneToOneField fails to ManyToManyField to a class with a OneToOneField fails

I used the models below, and I could not reproduce this problem. Please post back here if you still experience the error.

class A(models.Model):
    name = models.CharField(maxlength=60)
    
    class Admin: pass
    
    def __str__(self): return self.name

class B(models.Model):
    a = models.OneToOneField(A)
    
    class Admin: pass
    
    def __str__(self): return self.a.name
    
class C(models.Model):
    b = models.ManyToManyField(B)

    class Admin: pass
Note: See TracTickets for help on using tickets.
Back to Top