2017-08-18 2 views

Répondre

0

Option 1

Définissez le champ ForeignKey null sinon nécessaire. Peut valider cela dans la méthode clean().

class A(models.Model): 
    # ... 
    pass 

class B(models.Model): 
    # ... 
    pass 

class C(models.Model): 
    # ... 
    fkA = models.ForeignKey(A, null=True) # to null if not needed 
    fkB = models.ForeignKey(B, null=True) # to null if not needed 
    # ... 


    def clean(self): 
     # only one fk allowed 
     if self.fkA and self.fkB: 
      raise ValidationError("Relation either to A or to B - not both!") 
     # one fk required 
     if not self.fkA and not self.fkB: 
      raise ValidationError("Relation to A or to B required!") 

Option 2

travail avec l'héritage modèle

class A(models.Model): 
    # ... 
    pass 

class B(models.Model): 
    # ... 
    pass 

class AbstractC(models.Model): 
    # ... 

    class Meta: 
     # ... 
     abstract = True 

class CtoA(AbstractC) 
    # ... 
    fkA = models.ForeignKey(A) 
    # ... 

class CtoB(AbstractC) 
    # ... 
    fkB = models.ForeignKey(B) 
    # ... 

migration de base de données:

$ python manage.py makemigrations

$ python manage.py migrate