Отправьте зарегистрированную модель профиля пользователя в форму CreateView - PullRequest
0 голосов
/ 19 июня 2020
• 1000 py "class CreateOrderView (CreateView)" не имеет параметра "request", поэтому я не могу получить request.user, и поэтому получаю Requester_obj и автоматически выбираю этот Requester_obj в поле формы "Requester" при входе на эту страницу.

models.py Порядок:

    DEFAULT_REQUESTER_ID= 1
    requester = models.ForeignKey(Profile, on_delete=models.CASCADE, default=DEFAULT_REQUESTER_ID, verbose_name="usuario")

forms.py:

class OrderCreateForm(BaseForm, forms.ModelForm):
date = forms.DateField(label="Fecha" , widget=forms.DateInput(attrs={'type': 'date'}))

class Meta:
    model = Order
    fields = ['requester','title' , 'date', ]

views.py:

@method_decorator(staff_member_required, name='dispatch')
class CreateOrderView(CreateView):
    template_name = 'form.html'
    form_class = OrderCreateForm
    model = Order

    def get_success_url(self):
        self.new_object.refresh_from_db()
        return reverse('update_order', kwargs={'pk': self.new_object.id})

    def form_valid(self, form):
        object = form.save()
        object.refresh_from_db()
        self.new_object = object
        return super().form_valid(form)

Я получаю такой запрос :

@login_required
def create(request):
    #return render(request, 'app_client/create.html')
    if request.method == 'POST':
        if request.POST['value'] and request.POST['products']:
            logged_user = request.user
            user_obj = get_object_or_404(User, username=logged_user)
            requestor_obj = get_object_or_404(Profile, user=user_obj)

....

1 Ответ

0 голосов
/ 21 июня 2020

Я только что нашел решение своей проблемы ...

Я удалил поле «запрашивающий» в forms.py и отправил объект запроса в форму после того, как пользователь нажмет форму отправки button

def form_valid(self, form):
    logged_user = self.request.user
    user_obj = get_object_or_404(User, username=logged_user)
    requester_obj = get_object_or_404(Profile, user=user_obj)

    form.instance.requestor = requestor_obj

    object = form.save()
    object.refresh_from_db()
    self.new_object = object
    return super().form_valid(form)

form.instance.requestor = requestor_obj - это строка, которую мне нужно было отправить в форму перед сохранением.

ref: Django Внешний ключ CreateView

...