Предположим, у меня есть модель, как это:Настройка Джанго администратора сайта - в кнопках строк
class Foo(models.Model):
name = models.CharField(max_length=50)
year = models.IntegerField(max_length=4)
some_value = models.IntegerField(default=0)
и
class Bar(models.Model)
name = models.CharField(max_length=50)
foo = models.ForeignKey(Foo)
Тогда я зарегистрировать свои модели в Django AdminSite с помощью FooAdmin класса:
class FooAdmin(admin.ModelAdmin):
list_display = ['name', 'year', 'some_value']
Он отлично работает, но по какой-то причине мне нужно добавить две кнопки для каждой строки Foo на моем сайте администратора. Скажем, я бы назвал их «Related_button» и «Action_button»
Мне нужны эти кнопки, чтобы быть в каждой строке и вести себя следующим образом:
-Когда пользователь нажимает на «Related_button», он перенаправляется на Джанго администратора где все бары, связанные с объектом Foo объекта, перечислены
- Когда пользователь нажимает на «Action_button», поле some_value в объекте класса Foo устанавливается на пользовательское значение, скажем 15. Но до этого подтвердите всплывающее окно (вы обязательно? y/n).
Как это сделать? Я понял, что я мог бы сделать что-то вроде:
def button(self, obj):
return '''<input type="button" value="button" />'''
button.short_description = 'Action'
button.allow_tags = True
list_display = ['name', 'year', 'some_value', 'action']
в моей FooAdmin, который вызывает кнопку, чтобы появиться в каждой строке. Но как я могу настроить действие для этой кнопки?
Спасибо, что хорошо! Но я беспокоюсь об одном: я также изменил queryset mehtod в своем FooAdmin следующим образом: return Foo.objects.filter (created_by = request.user). Является ли my_view объектом Foo в моем фильтрованном наборе или он извлекает его непосредственно из базы данных? Я не хочу, чтобы мой пользователь видел то, что ему не позволили. – slnowak
Я предполагаю, что ваш пользователь может возиться с URL-адресом. Но вы могли бы сделать: 'obj = get_object_or_404 (Foo, pk = pk, created_by = request.user)', если obj не создан этим пользователем, он поднимет значение 404. – allcaps
Или, конечно, есть другие способы. Проверьте и верните полезное сообщение: 'if request.user! = Obj.created_by: return" Этот инцидент будет сообщен. "' – allcaps