开发者

How do I reference Django Model from another model

开发者 https://www.devze.com 2022-12-30 14:20 出处:网络
Im looking to create a view in the admin panel for a test program which logs Books, publishers and authors (as on djangoproject.com)

Im looking to create a view in the admin panel for a test program which logs Books, publishers and authors (as on djangoproject.com)

I have the following two models defined.

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    email = models.EmailField()

    def __unicode__(self):
        return u'%s %s' % (self.first_name, self.last_name)

class Book(models.Model):
    titl开发者_运维问答e = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

    def __unicode__(self):
        return self.title

What I want to do, is change the Book model to reference the first_name of any authors and show this using admin.AdminModels.

#Here is the admin model I've created.

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'publisher', 'publication_date') # Author would in here
    list_filter = ('publication_date',)
    date_hierarchy = 'publication_date'
    ordering = ('-publication_date',)
    fields = ('title', 'authors', 'publisher', 'publication_date')
    filter_horizontal = ('authors',)
    raw_id_fields = ('publisher',)

As I understand it, you cannot have two ForeignKeys in the same model. Can anyone give me an example of how to do this?

I've tried loads of different things and its been driving me mad all day. Im pretty new to Python/Django.

Just to be clear - I'd simply like the Author(s) First/Last name to appear alongside the book title and publisher name.

Thanks


You can have more than one Foreign Key on a model. If you would put a Foreign-Key field's name in list_display you will always just see the __unicode__ representation of the associated model. But you can add a function like this to your BookAdmin:

def first_names(self, obj):
    return ','.join(a.first_name for a in obj.authors.all())
get_sites.short_description = 'First Names'

Then add 'first_names' to list_display.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号