2016-07-28 19 views
0

Ich arbeite mit einer vorhandenen Datenbank und möchte eine ManyToMany-Beziehung zwischen zwei Tabellen erstellen. Der abgekürzte Code lautet:Django REST Framework ManyToMany Feld Fehler

class AddressSummary(models.Model): 

    class Meta: 
     managed = False 
     db_table = 'addresses' 
     app_label = 'myapp' 

    address_id = models.IntegerField(db_column='addr_id', primary_key=True) 
    partial_matches = models.ManyToManyField(
     to='ReferenceAddress', 
     through='AddressMatches' 
    ) 
    @property 
    def get_partial_matches(self): 
     try: 
      return self.partial_matches.all() 
     except Exception as E: 
      print(E) 


class ReferenceAddress(models.Model): 

    class Meta: 
     managed = False 
     db_table = 'reference_addresses' 
     app_label = 'myapp' 

    id = models.IntegerField(db_column='ID', primary_key=True) 
    family_name = models.CharField(unique=True, max_length=255) 
    type_name = models.CharField(unique=True, max_length=255) 
    partial_matches = models.ManyToManyField(
     to='AddressOverview', 
     through='AddressMatches', 
    ) 


class AddressMatches(models.Model): 

    class Meta: 
     managed = False 
     db_table = 'partial_matches' 
     unique_together = (('addr_id', 'ref_id'),) 
     app_label = 'myapp' 

    addr_id = models.ForeignKey('AddressSummary', models.DO_NOTHING, db_column='addr_id', to_field='address_id') 
    ref_id = models.ForeignKey('ReferenceAddress', models.DO_NOTHING, to_field='id') 

ich die folgende Fehlermeldung erhalten:

Cannot resolve keyword 'addresssummary' into field. Choices are: family_name, id, partial_matches, type_name 

Irgendwelche Ideen? Ich habe versucht, die Klassen neu zu ordnen, aber das hilft nicht. Wenn ich die fehlerhafte Zeile in eine try/except-Klausel wickeln, gibt es die folgende Ausnahme:

'ManyToManyField' object has no attribute '_m2m_reverse_name_cache' 
+0

Dieses Problem tritt auf, wenn Sie migrate ausführen? – wilcus

+0

Nein, ich habe einen Serializer, der eine AddressSummary zurückgibt. Der Fehler tritt auf, wenn ich self.partial_matches.all() in einer Eigenschaft einer Instanz der AddressSummary-Klasse aufruft. Ziel ist es, die family_names der Referenzadressen mit der Zusammenfassung zurückzugeben. – vahndi

Antwort

0

Sie uns zeigen sollte, wie Ihr Serializer aussieht.

Fehlende Informationen machen Beantworter schwieriger zu erraten, was los ist, und Ihre Chance auf Antwort zu bekommen geht ..

Mit der begrenzten Informationen,

Cannot resolve keyword 'addresssummary' into field. Choices are: family_name, id, partial_matches, type_name

The error happens when I call self.partial_matches.all() in a property of an instance of the AddressSummary class

Sie sagen, dass Ihr self in self.partial_matches.all() ist AddressSummary-Instanz, aber der Fehler zeigt alle Felder von ReferenceAddress an, was darauf hindeutet, dass self eigentlich ReferenceAddress ist.

Sie könnten damit beginnen.

+0

Der Fehler tritt vor irgendeiner Serialisierung auf, also habe ich es nicht eingeschlossen. Ich habe den obigen Code geändert. Ich kann leider nicht alles zeigen. Die Eigenschaft get_partial_matches wird von anderen nicht gezeigten Eigenschaften verwendet. – vahndi

Verwandte Themen