2016-07-28 1 views
0

Je travaille avec une base de données existante et souhaite créer une relation ManyToMany entre deux tables. Le code abrégé est:Django REST Framework ManyToMany Erreur de champ

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

Je reçois l'erreur suivante:

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

Toutes les idées? J'ai essayé de réorganiser les classes, mais cela n'aide pas. Si j'enveloppe la ligne d'échec dans un try/except clause, elle renvoie l'exception suivante:

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

Ce problème apparaît lors de l'exécution de la migration? – wilcus

+0

Non, j'ai un sérialiseur qui retourne un AddressSummary. L'erreur se produit lorsque j'appelle self.partial_matches.all() dans une propriété d'une instance de la classe AddressSummary. Le but est de retourner les family_names des adresses de référence avec le résumé. – vahndi

Répondre

0

Vous devriez nous montrer comment votre sérialiseur ressemble.

informations manquantes font answerers à deviner plus difficile ce qui se passe, et vos chances d'obtenir réponse descend ..

Avec les informations limitées,

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

Vous dites que votre self dans self.partial_matches.all() est AddressSummary instance, mais l'erreur montre tous les champs de ReferenceAddress suggérant le self est actuellement ReferenceAddress.

Vous pourriez commencer par cela.

+0

L'erreur se produit avant toute sérialisation, donc je ne l'ai pas inclus. J'ai modifié le code ci-dessus. Je ne peux pas tout montrer malheureusement. La propriété get_partial_matches est utilisée par d'autres propriétés non affichées. – vahndi