2017-11-30 4 views
0

Ich kann nicht herausfinden, wie Beziehung zwischen Tabellen hinzugefügt wird.Verwendung von CompositeKey und ForeignKeyField in peewee

class MyModel(BaseModel): 
    a = peewee.TextField() 
    b = peewee.TextField() 
    c = peewee.IntegerField() 
    d = peewee.TextField() 
    e = peewee.FloatField() 
    f = peewee.FloatField() 

    class Meta: 
     primary_key = peewee.CompositeKey('a', 'b', 'c', 'd') 


class RModel(BaseModel): 
    """ 
    """ 
    record = peewee.ForeignKeyField(MyModel, related_name='record') 
    date = peewee.DateTimeField(default=datetime.datetime.now) 

Ich mag garantiert, dass 'a', 'b', 'c', 'd' Felder in MyModel einzigartige Kombination erstellen. (Einzigartig zusammen)

Ich möchte auch Bezug auf diese Tabelle RModel Tabelle hinzuzufügen als ForeignKey

ich noch immer

AttributeError: 'CompositeKey' object has no attribute 'get_db_field' 

Antwort

0

Peewee nicht zusammengesetzten Fremdschlüssel unterstützen. Sie möchten etwas wie dieses tun:

class RModel(BaseModel): 
    a = peewee.TextField() 
    b = peewee.TextField() 
    c = peewee.IntegerField() 
    d = peewee.TextField() 

    class Meta: 
     constraints = ['...(optional) sql for constraint...'] 

    @property 
    def my_model(self): 
     return MyModel.get(
      (MyModel.a == self.a) & 
      (MyModel.b == self.b) & 
      (MyModel.c == self.c) & 
      (MyModel.d == self.d))