Отправка данных формы как при нажатии кнопки ввода, так и при нажатии кнопки отправки в модальном окне Bootstrap

Это просто и работает с Django 1.4:

class ClientAdminForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(ClientAdminForm, self).__init__(*args, **kwargs)
        # access object through self.instance...
        self.fields['base_rate'].queryset = Rate.objects.filter(company=self.instance.company)

class ClientAdmin(admin.ModelAdmin):
    form = ClientAdminForm
    ....

Вам не нужно указывать это в классе формы, но можете делать это непосредственно в ModelAdmin, поскольку Django уже включает это встроенный метод в ModelAdmin (из документов):

ModelAdmin.formfield_for_foreignkey(self, db_field, request, **kwargs)¶
'''The formfield_for_foreignkey method on a ModelAdmin allows you to 
   override the default formfield for a foreign keys field. For example, 
   to return a subset of objects for this foreign key field based on the
   user:'''

class MyModelAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "car":
            kwargs["queryset"] = Car.objects.filter(owner=request.user)
        return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

. Даже более удобный способ сделать это (например, при создании интерфейса администратора администратора, к которому пользователи могут обращаться) - подклассировать ModelAdmin, а затем измените приведенные ниже методы. Конечным результатом является пользовательский интерфейс, который ТОЛЬКО показывает им контент, связанный с ними, позволяя вам (суперпользователю) видеть все.

Я переопределил четыре метода, первые два сделали это невозможно для пользователя что-либо удалить, а также удаляет кнопки удаления с сайта администратора.

Третье переопределение фильтрует любой запрос, содержащий ссылку (в примере «пользователь» или «дикобраз» (как иллюстрация).

Последнее переопределение фильтрует любое поле внешней клавиши в модели для фильтрации доступных вариантов, таких же, как и для базового набора запросов.

Таким образом, вы можете создать простой для управления фронт-админ-сайт, который позволяет пользователям общаться со своими собственными объектами, а вы не нужно помнить, чтобы вводить специальные фильтры ModelAdmin, о которых мы говорили выше.

class FrontEndAdmin(models.ModelAdmin):
    def __init__(self, model, admin_site):
        self.model = model
        self.opts = model._meta
        self.admin_site = admin_site
        super(FrontEndAdmin, self).__init__(model, admin_site)

удалить кнопки «delete»:

    def get_actions(self, request):
        actions = super(FrontEndAdmin, self).get_actions(request)
        if 'delete_selected' in actions:
            del actions['delete_selected']
        return actions

предотвращает разрешение на удаление

    def has_delete_permission(self, request, obj=None):
        return False

фильтрует объекты, которые можно просмотреть на сайте администратора:

    def get_queryset(self, request):
        if request.user.is_superuser:
            try:
                qs = self.model.objects.all()
            except AttributeError:
                qs = self.model._default_manager.get_queryset()
            return qs

        else:
            try:
                qs = self.model.objects.all()
            except AttributeError:
                qs = self.model._default_manager.get_queryset()

            if hasattr(self.model, ‘user’):
                return qs.filter(user=request.user)
            if hasattr(self.model, ‘porcupine’):
                return qs.filter(porcupine=request.user.porcupine)
            else:
                return qs

выбирает фильтры для всех полей foreignkey на сайте admin:

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if request.employee.is_superuser:
            return super(FrontEndAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

        else:
            if hasattr(db_field.rel.to, 'user'):
                kwargs["queryset"] = db_field.rel.to.objects.filter(user=request.user)
            if hasattr(db_field.rel.to, 'porcupine'):
                kwargs["queryset"] = db_field.rel.to.objects.filter(porcupine=request.user.porcupine)
            return super(ModelAdminFront, self).formfield_for_foreignkey(db_field, request, **kwargs)
24
задан Anon 3 April 2014 в 10:48
поделиться

3 ответа

Прослушайте событие формы submit - оно вызывается событиями ввода и нажатия.

Разметка

<form id="yourForm">
  <input type="text" name="username">
  <input type="password" name="password">
  <input type="submit" value="Submit">
</form>

JS

$('#yourForm').submit(function(event){

  // prevent default browser behaviour
  event.preventDefault();

  //do stuff with your form here
  ...

});
31
ответ дан moonwave99 3 April 2014 в 10:48
поделиться
  1. Измените type = "submit" с вашей кнопки входа на type = "button".

РЕДАКТИРОВАТЬ: 2. Попробуйте удалить data-keyboard = "false".

0
ответ дан om_deshpande 3 April 2014 в 10:48
поделиться

Я сделал это, когда форма отправки откроется в модальном диалоговом окне и после этого отправит всю запись в полях. Если вы нажмете кнопку «Отправить», запись будет сделана в базе данных, и страница сразу же будет перенаправлена ​​на ту же страницу с новыми данными. Нет необходимости обновлять, чтобы увидеть последние введенные данные. Надеюсь, это поможет.

<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">ADD CONTENT</button>
<!-- Modal -->
  <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
          <h4 class="modal-title" id="myModalLabel">Please Add Content</h4>
        </div>
      <div class="modal-body">
        <form role="form" action="" method="POST">
          <!-- YOUR HTML FORM GOES HERE--->
        <button type="submit" name="submit" class="btn btn-primary btn-lg"id="sub" onclick="SUBMISSION()" >Submit </button>
        </fieldset>
        </form>
<?php
  if(isset(

Я сделал это, когда форма отправки откроется в модальном диалоговом окне и после этого отправит всю запись в полях. Если вы нажмете кнопку «Отправить», запись будет сделана в базе данных, и страница сразу же будет перенаправлена ​​на ту же страницу с новыми данными. Нет необходимости обновлять, чтобы увидеть последние введенные данные. Надеюсь, это поможет.

[110]

POST['submit'])) { SUBMISSION(); } function SUBMISSION() { // UR CONNECTION ESTABLISHMENT CODE GOES HERE // SQL QUERY FOR INSERTION IN FIELDS echo"<script type=\"text/javascript\"> document.location.href='http://localhost/dict/pages/YOURPAGE.php'; </script>"; $conn->CLOSE(); } ?> </div> </div> <!-- /.modal-content --> </div> <!-- /.modal-dialog --> <!-- /.panel-body --> </div> <!-- /.panel --> </div> <!-- /.col-lg-12 -->

0
ответ дан Adrian Mann 3 April 2014 в 10:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: