Если я вас правильно понял, то store_id
всегда указывает на C
верно? Но это значение зависит от поля type
?
В этом случае вы можете установить нормальное соотношение между этими моделями и установить store_id
на основе поля type
во время сохранения:
class A(models.Model):
id=models.IntegerField(primary_key=True)
name=models.CharField(max_length=200)
store=models.ForeignKey(C)
type=models.ForeignKey(B)
def save(self,*args, **kwargs):
if self.type == some_type:
self.store = get_specific_store_here()
super(A, self).save(*args, **kwargs)
И позже вы можете получить доступ к названию магазина по:
# a is an object of model A
a.store.store
Если вы хотите придерживаться общего целочисленного поля, вы можете просто добавить собственный метод:
class A(models.Model):
id=models.IntegerField(primary_key=True)
name=models.CharField(max_length=200)
store_id=models.IntegerField()
type=models.ForeignKey(B)
def get_store_name():
store = C.objects.get(pk=self.store_id)
return store.store