Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
749 views
in Technique[技术] by (71.8m points)

Changing name of Foreign Key items at admin page in Django

I have created two Django models, were a field from one model is a Foreign key to another (as per below).

class Units(models.Model):
    name = models.CharField(max_length=10, primary_key=True)
    symbol = models.CharField(max_length=5)


class Targets(models.Model):
    name = models.CharField(max_length=100)
    unit = models.ForeignKey(MicroNutrientUnits)
    ...

These models are then registered to the admin site via admin.site.register. When adding an item to table Target unit correctly reflects items from table Units, however are represented in a dropdown with the name Units objects for each entry.

How can I set the name in the admin dropdown to Units.name in the admin config page?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I had the same issue when I started playing with the admin screens. I don't know if there is a better way to do this but what I did was modify the models.py file to tell my classes what to return as a default string. In your case what I would do is add the following to your Units class definition.

class Units(models.Model):
    name = models.CharField(max_length=10, primary_key=True)
    symbol = models.CharField(max_length=5)

    def __str__(self):
        return self.name

This way, when you use the foreign key link to the table, django will display the name of each unit in the dropdown list instead of just the word 'Units' over and over.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...