django的ModelAdmin中参数obj是什么
时间: 2024-04-23 10:25:03 浏览: 15
在Django的ModelAdmin中,参数obj代表着当前正在被编辑的对象。它可以在ModelAdmin中的各种方法中使用,例如在重写ModelAdmin的save_model方法时,可以通过obj参数获取当前正在被编辑的对象的信息,然后对其进行修改或者其他操作。在ModelAdmin的一些其他方法中,如get_queryset或者get_form中也可以使用obj参数来获取当前正在编辑的对象的信息。
相关问题
源码中obj是如何调用的?
在Django源码中,obj参数通常是在ModelAdmin中的各个方法中作为参数被传递调用的。例如,在ModelAdmin中的change_view方法中,Django会将当前正在编辑的对象的信息传递给obj参数,然后可以通过obj参数来进行一些修改或者其他操作。具体代码如下:
```python
def change_view(self, request, object_id, form_url='', extra_context=None):
obj = self.get_object(request, unquote(object_id))
if obj is None:
raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {
'name': force_text(self.opts.verbose_name), 'key': escape(object_id)})
# 其他代码
```
在上面的代码中,get_object方法会返回当前正在编辑的对象的信息,然后将其赋值给obj参数。这样,我们就可以在change_view方法中使用obj参数来操作当前正在编辑的对象了。这种用法在其他ModelAdmin的方法中也很常见,例如,save_model、get_queryset、get_form等等。
django-admin如何显示其他列的到自身表的列中
如果你想在 Django 的 admin 界面中,将一个表中的某个列显示为另外一个表中的列,可以通过 Django 的 `ForeignKey` 类型来实现。
以一个简单的示例为例,假设我们有一个 `Author` 表和一个 `Book` 表,其中 `Book` 表包含了一个外键列 `author_id`,表示该书的作者是哪个作者。我们希望在 `Book` 表的 admin 界面中,显示出该书的作者的姓名(即 `Author` 表中的 `name` 列)。
我们可以在 `Book` 表中定义一个 `ForeignKey` 类型的字段,将其关联到 `Author` 表,例如:
```python
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
# ...
```
然后,在 `Book` 表的 admin 界面中,我们可以通过 `list_display` 参数来指定要显示的列。在其中,我们可以通过 `__` 运算符来访问外键关联的表中的列,例如:
```python
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author_name')
def author_name(self, obj):
return obj.author.name
author_name.short_description = 'Author'
```
在上面的代码中,我们定义了一个 `BookAdmin` 类,并指定了要显示的列。其中,`author_name` 是一个自定义的方法,用来获取该书的作者的姓名。在该方法中,我们通过 `obj.author.name` 来访问外键关联的 `Author` 表中的 `name` 列,并将其返回。
最后,我们通过 `admin.site.register` 方法将 `Book` 表和 `BookAdmin` 类关联起来,使其能够在 admin 界面中显示:
```python
admin.site.register(Book, BookAdmin)
```
这样,在 `Book` 表的 admin 界面中,就会显示出每本书的作者的姓名了。