与用户对象没有创建Django有关

问题描述 投票:0回答:1

感谢您的时间:

我在POST请求中遇到了问题,它使我获得了解码代码302.0

它应该创建一个与执行请求的用户相关的对象:

views.py:

@login_required
@transaction.atomic
def parceiros_create(request):
    if request.method == 'POST':
        form = ParceirosForm(request.POST, instance=request.user.parceiros)
        if form.is_valid():
            form.save()
            messages.success(request, ('Parceiro criado'))
            return redirect('home2')
        else:
            messages.error(request, ('Please correct the error below.'))
    else:
        form = ParceirosForm(instance=request.user)
    context = {
        'form': form,
    }
    return render (request, 'parceiroform.html', context)

forms.py:

class ParceirosForm(forms.ModelForm):
    nome = forms.CharField(max_length=200)
    endereco = forms.TextInput()
    responsavel = forms.CharField(max_length=100)    
    tel = PhoneField(max_length=12)

    class Meta:
        prefix = 'parceiro'
        model = Parceiros
        fields = ['nome', 'endereco', 'responsavel', 'tel']

models.py:

get_user_model = User

class Parceiros (models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    nome = models.CharField(max_length=200)
    endereco = models.TextField(max_length=400, blank=True)
    responsavel = models.CharField(max_length=100)
    tel = PhoneField(max_length=12)
    created_at = models.DateTimeField(auto_now=True)
    updated_at = models.DateTimeField(auto_now_add=True, blank=True)
    ativo = models.BooleanField(default=False)

    def __str__(self):
        return '%s %s' % (self.user, self.nome)

parceiroform.html:

{% extends 'base.html' %}

{% block content %}

<h1>ok</h1>
<h1>OK</h1>
<h1>ok</h1>

<form method="POST">
    {% csrf_token %}
    {{form.as_p}}
    <button type="submit">Save</button>
</form>
{% endblock %}

尽管我没有创建任何对象(Parceiros),但我正在管理员上收到消息(parceiro criado)。

python django python-3.x django-forms django-views
1个回答
0
投票

您没有处理用户,所以要像这样更改它

if form.is_valid():
      obj = form.save(commit=False)
      obj.user = request.user
      obj.save()
      ....
© www.soinside.com 2019 - 2024. All rights reserved.