Django: невозможно автоматически вставить идентификатор пользователя в другую форму - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь получить информацию о пользователе / ​​клиенте и автоматически скопировать ее в новую модель через индивидуальную форму после запроса, но продолжаю получать ошибку. Общий обзор, как показано ниже. (ошибка: ValueError в / create_request / Невозможно назначить " > ":" OrderRequest.user "должен быть экземпляром" Customer ".) модель отношения между моделью клиента и моделью запроса

my views.py, как показано ниже:

from django.shortcuts import render, redirect
from .models import *
from accounts.models import *
from .forms import CreateRequestForm
from django.contrib.auth.decorators import login_required
from accounts.models import *

@login_required(login_url='login')
def createRequest(request):
form = CreateRequestForm()
if request.method =='POST':
    form = CreateRequestForm(request.POST)
    if form.is_valid():
        order = form.save(commit=False)
        order.user = request.user
        order.save()
    return redirect('/')

context = {'form':form}
return render(request, 'commerce_autoparts/request_form.html', context)

здесь мой model.py (autopart_ecommerce): То же, что и на прикрепленном изображении

from django.db import models
from accounts.models import Customer

class Logistic(models.Model):
logistic_method = models.CharField(max_length=30, null=True, 
 blank=True)

def __str__(self):
    return self.logistic_method

class OrderRequest(models.Model):
user = models.ForeignKey(Customer, on_delete=models.CASCADE, 
null=True, blank=True)
ref_code = models.CharField(max_length=15, null=True, blank=True)
link = models.URLField(null=True, blank=True)
image = models.ImageField(upload_to='media/images',null=True, 
blank=True)
price = models.FloatField(null=True)
draft = models.BooleanField(default=True)
logistic_method = models.ForeignKey(Logistic, 
on_delete=models.CASCADE, null=True, blank=True)
note = models.TextField(max_length=100)
date_order = models.DateTimeField(auto_now=True)

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 августа 2020

Мне как-то удается решить вопрос. Просто я не отсылаю пользователя к модели клиента. Добавляя модель клиента (instance.user = request.user.customer), он автоматически сохраняет идентификатор клиента после отправки. это может быть не идеальное решение, но пока работает ..

@login_required(login_url='login')
def createRequest(request):
form = CreateRequestForm(request.POST)
if request.method =='POST':
    form = CreateRequestForm(request.POST, request.FILES)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.user = request.user.customer
        instance.ref_code = get_ref_code()
        instance.save()
        return redirect('/')
0 голосов
/ 07 августа 2020

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

пример:

# instead of this 
order.user = request.user
order.save()

# you could do
new_user = Customer()
new_user.name = request.user.name
new_user.email = request.user.email
new_user.last_name = request.user.last_name

# then pass the user to the order
order.user = new_user
order.save()

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