Tom Brock
Tom Brock

Reputation: 950

How to iterate over every foreign key in a model?

If I have a model like the following:

class Keyword(models.Model):
    model1 = models.ForeignKey(Model1, null=True, blank=True, default=None)
    model2 = models.ForeignKey(Model2, null=True, blank=True, default=None)
    model3 = models.ForeignKey(Model3, null=True, blank=True, default=None)
    model4 = models.ForeignKey(Model4, null=True, blank=True, default=None)      
    not_foreign_key = models.CharField(max_length=10, null=True, blank=True)

How can I iterate over each foreign key?

I'm imagining some sort of for loop like this (pseudocode):

for each foreign key in Keyword:
    do something with the foreign key

Thank you for your help.

Upvotes: 0

Views: 1615

Answers (1)

8192K
8192K

Reputation: 5290

You can use the private API to get all foreign key information:

# 'instance' is an instance of any kind of Django model
fields = instance._meta._get_fields(forward=True, reverse=False)
for field in fields:
   obj_field_value = field.value_from_obj(instance)  # This is the value the instance has for this field
   foreign_key_related_model = field.related_model  # returns the model the foreign key links to. There are plenty more properties here

Upvotes: 2

Related Questions