Django modelo definido chave estrangeira para um campo de outro modelo

votos
19

Existe alguma maneira para definir uma chave estrangeira no django a um campo de outro modelo?

Por exemplo, imagine que eu tenha um objeto ValidationRule. E eu quero que a regra para definir o campo em outro modelo deve ser validado (bem como algumas outras informações, como se ele pode ser nulo, um tipo de dados, gama, etc.)

Existe uma maneira de armazenar esse mapeamento em nível de campo no Django?

Publicado 08/04/2009 em 15:12
fonte usuário
Em outras línguas...                            


2 respostas

votos
70

Eu não tentei isso, mas parece que desde Django 1.0 você pode fazer algo como:

class Foo(models.Model):
    foo = models.ForeignKey(Bar, to_field='bar')

Documentação para isso é aqui .

Respondeu 04/01/2010 em 15:56
fonte usuário

votos
16

Sim e não. A relação FK é descrito no nível da classe e espelha a associação FK no banco de dados, para que você não pode adicionar informação extra diretamente no parâmetro FK.

Em vez disso, eu recomendo ter uma cadeia que contém o nome do campo na outra tabela:

class ValidationRule(models.Model):
    other = models.ForeignKey(OtherModel)
    other_field = models.CharField(max_length=256)

Dessa forma, você pode obter o campo com:

v = ValidationRule.objects.get(id=1)
field = getattr(v, v.other_field)

Note que se você estiver usando muitos-para-muitos campos (em vez de um um-para-muitos), não é construído com suporte para a criação de tabelas personalizadas intermediários para armazenar dados de meta com o meio opção.

Respondeu 08/04/2009 em 15:18
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more