Как автоматически вставить текущего пользователя при создании объекта в django Create template? - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть база статей с

 User=models.ForeignKey(User,related_name="Company_Owner",
on_delete=models.CASCADE)

Где пользователь импортируется следующим образом:

 from django.contrib.auth.models import User.

Я хотел бы автоматически вставить текущего активного пользователя в поле «Пользователь», когда конкретный пользователь отправляет статью.

Я сделал это в админке django:

class companyAdmin(admin.ModelAdmin):
      def save_model(self, request, obj, form, change):
          if getattr(obj, 'User', None) is None:
              obj.User = request.user
          obj.save()

Но это меняется для суперпользователей, только если я захожу в django admin, оно не меняется для всех пользователей, если я отправляю форму из шаблона, оно не возвращает конкретного пользователя.

У кого-нибудь есть предложения?

Ответы [ 3 ]

0 голосов
/ 08 сентября 2018

Вы можете переопределить get_changeform_initial_data класса ModelAdmin:

def get_changeform_initial_data(self, request):
    initial = {
        'user': request.user
    }

    return initial

Вы также можете установить начальные значения других полей, если хотите.Этот метод вызывается только при добавлении объекта.В его реализации по умолчанию заполняются поля на основе параметров GET:

django.contrib.admin.options.py

def get_changeform_initial_data(self, request):
    """
    Get the initial form data.
    Unless overridden, this populates from the GET params.
    """
    initial = dict(request.GET.items())
    for k in initial:
        try:
            f = self.model._meta.get_field(k)
        except FieldDoesNotExist:
            continue
        # We have to special-case M2Ms as a list of comma-separated PKs.
        if isinstance(f, models.ManyToManyField):
            initial[k] = initial[k].split(",")
    return initial

Редактировать: вы можете использоватьта же логика, если вы хотите реализовать это в обычном представлении.В этом случае вы должны создать экземпляр ModelForm следующим образом:

form = ArticleForm(request.POST or None, initial={'user': request.user})
0 голосов
/ 11 сентября 2018

получил ответ -

Сделал что-то подобное, на мой взгляд, и это сработало ---

  class group1CreateView(LoginRequiredMixin,CreateView):
     form_class  = group1Form
     template_name = "accounting_double_entry/group1_form.html"

     def form_valid(self, form):
        form.instance.User = self.request.user
        return super(group1CreateView, self).form_valid(form)

Спасибо всем, что ответили ... Это много значит ...

0 голосов
/ 08 сентября 2018

На самом деле ничего не нужно делать. request.user представляет текущего пользователя. Если пользователь в данный момент не вошел в систему, для пользователя будет установлен экземпляр AnonymousUser.

просто напишите представление, в котором конкретный пользователь представляет статью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...