You may want to look at the model _meta API. https://docs.djangoproject.com/en/2.0/ref/models/meta/
You are looking for a list of all the ForeignKeys, but you also probably want other relations such as OneToOne and ManyToMany. You probably want something like the get_all_related_objects method: https://docs.djangoproject.com/en/2.0/ref/models/meta/#migrating-from-the-old-api The fields have an attribute called is_relation, one_to_one, and many_to_one. From: [email protected] [mailto:[email protected]] On Behalf Of Rob Schneider Sent: Tuesday, February 27, 2018 10:46 PM To: [email protected] Subject: Re: How to get Foreign Key Objects programmatically? Still a mystery to me. --rms On 28 Feb 2018, at 03:22, Malik Rumi <[email protected]<mailto:[email protected]>> wrote: Did you ever find an answer? If so, do you mind sharing it? Thanks. On Sunday, October 29, 2017 at 9:33:10 AM UTC-7, rmschne wrote: I'm using Django as front end to a MySQL database. User interface is a terminal program, not a web site. I've written a very simple generic function to edit the fields of one record of a Django "object". It works fine for editing editable fields. User specifies which field, then is shown the current value, raw_input() for the new value, then save() the record. For fields that connect to Foreign Keys, what I want to do is present to user a simple list of Foreign Key records, from which the user will pick the relevant ID. I know, given a list and the ID, how to then edit the record by doing a Django get(id=ID) on the Foreign Key table. What I'm having trouble doing is figuring how 1. Identify into a variable the name of the Foreign Key table/object 2. Then with that variable do a call to the relevant Foreign Key table, e.g. ForeignKeyTable.objects.all() See code below for <===WHAT I DO NOT KNOW HOW TO DO IN CODE Below. I think I need some Django function that gives me the foreign key table in some useable generic form. Hope all this makes sense. --rms def EditDjangoObjectData(djangoobject,show=False,editonerecord=False): """ EditDjangoObjectData() djangoojbect=a django object, e.g. a record in a table """ print "\n****ToDo Note: This routine not yet working on fields with foreign keys!" changelist=[] ok=True while ok: change=None fields = [(f.name<http://f.name>, f.editable) for f in djangoobject._meta.get_fields()] if show: print "\nfields:\n",fields print "django object:\n",djangoobject s="\nEditable Fields ('enter' to return): \n" fieldlist=[] for i in fields: if i[1]: # only for 'editable' fields if i[0].lower() <> "id": s=s+i[0]+", " fieldlist.append(i[0]) s=s+"DELETE or '?'" fieldok=False while not fieldok: fieldtochange=raw_input("Enter field name to change:\n"+s+": ") if not fieldtochange: return None elif fieldtochange.upper()=="DELETE": ans=raw_input("...Confirm DELETE by typing 'DELETE': ") try: if ans=="DELETE": rtn=djangoobject.delete() print "Deleted. ",rtn return rtn except: print "***DELETE Failed.",sys.exc_info()[0] ans=raw_input("Press 'Enter' to continue ... ") elif fieldtochange=="?": PrintObjectDetails(djangoobject) elif fieldtochange in fieldlist: fieldok=True else: print "\n****Error. ",fieldtochange,"is not in list. Try again." print "Current Value of Field to Change:",fieldtochange,"is:",getattr(djangoobject, fieldtochange) ** ** In here add some code to show a list of the foreign key records for user to select, e.g. ID, Description, **for r in ForeignKey.objects.all(): <== WHAT I DO NOT KNOW HOW TO DO IN CODE. ** print i.id<http://i.id>, i.description **ID=raw_input("Enter ID:) **foreignkeyobject=ForeignKey.objects.get(id=ID) <== WHAT I DO NOT KNOW HOW TO DO IN CODE. ** ... then put that object into the relevant field newvalue=raw_input("Enter New Value: ") change="changed ["+fieldtochange+"]" print "\nTo Save :",djangoobject print "The Change:",change,"to",newvalue if not newvalue: return None elif newvalue.lower()=="none": newvalue=None elif newvalue.lower()=="true": newvalue==True elif newvalue.lower()=="false": newvalue=False setattr(djangoobject, fieldtochange, newvalue) try: djangoobject.save() print ": Success. Saved:",change,"to",newvalue print ": New Object:",djangoobject changelist.append(change) print "ChangeList:",changelist except: print "***Save Failed.",sys.exc_info()[0] ans=raw_input("Press 'Enter' to continue ... ") if editonerecord: ok=False return changelist -- You received this message because you are subscribed to a topic in the Google Groups "Django users" group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/django-users/ShjLffcxFDk/unsubscribe. To unsubscribe from this group and all its topics, send an email to [email protected]<mailto:[email protected]>. To post to this group, send email to [email protected]<mailto:[email protected]>. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/e6ddd293-66ac-496a-94d4-10fd44cb1224%40googlegroups.com<https://groups.google.com/d/msgid/django-users/e6ddd293-66ac-496a-94d4-10fd44cb1224%40googlegroups.com?utm_medium=email&utm_source=footer>. For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]<mailto:[email protected]>. To post to this group, send email to [email protected]<mailto:[email protected]>. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/8EC6426B-DA91-4C27-97C1-C9D7A820E79A%40gmail.com<https://groups.google.com/d/msgid/django-users/8EC6426B-DA91-4C27-97C1-C9D7A820E79A%40gmail.com?utm_medium=email&utm_source=footer>. For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/f55f172131e84b2bbf188874d441658b%40ISS1.ISS.LOCAL. For more options, visit https://groups.google.com/d/optout.

