Django ModelForm игнорирует данные, предоставленные через форму, и сохраняет имя суперпользователя в таблице. - PullRequest
0 голосов
/ 03 апреля 2020

Я новичок в использовании форм Django (всего Django), и в моей первой форме я столкнулся с этой ошибкой. Независимо от того, какие данные я публикую через форму, имя суперпользователя сохраняется во всех полях.

Вот файлы,

forms.py

from django.forms import ModelForm
from .models import *

class NewCustomer(ModelForm):
    class Meta:
        model = Customer
        fields = ('name', 'mobile_number', 'email', 'address')

Просмотры. py

from django.shortcuts import render, get_object_or_404, redirect
from .models import *
from .forms import *

# Create your views here.
def customers(request):
    customers = Customer.objects.all().order_by('id')
    return render(request, "customers.html", {'customers': customers, 'custactive': "active"})

def customer_details(request, pk):
    customer = get_object_or_404(Customer, pk=pk)
    return render(request, "customer_details.html", {'customer': customer})

def new_customer(request):
    if request.method == 'POST':
        form = NewCustomer(request.POST)
        if form.is_valid():
            customer = form.save(commit=False)
            customer.name = request.user
            customer.mobile_number = request.user
            customer.email = request.user
            customer.address = request.user
            customer.save()
            return redirect ('customers')

    else:
        form = NewCustomer()

    return render(request, "new_customer.html", {'form': form})

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

Очень ценю вашу помощь ...

1 Ответ

0 голосов
/ 03 апреля 2020

Проблема в том, что вам нужно указать форме, какие поля получить из User объекта. Теперь, если вы расширили модель User и указали name, mobile_number, address, вам необходимо изменить код.

def new_customer(request):
if request.method == 'POST':
    form = NewCustomer(request.POST)
    if form.is_valid():
        customer = form.save(commit=False)
        customer.name = request.user.name
        customer.mobile_number = request.user.mobile_number
        customer.email = request.user.email
        customer.address = request.user.address
        customer.save()
        return redirect ('customers')

Причина, по которой имя суперпользователя сохраняется во всех Это связано с тем, что все модели имеют свой метод str , который сообщает python, что выводить на печать, если используется сам объект.

...