【问题标题】:Django raising Type Error "profile() got an unexpected keyword argument 'user'"Django引发类型错误“profile()得到了一个意外的关键字参数'user'”
【发布时间】:2014-11-27 23:39:41
【问题描述】:

我使用 Django 已经有一段时间了,今天我遇到了一个我一生都无法解决的问题。我正在尝试加载他们自己在上一步中保存的用户配置文件,但是当我尝试打开配置文件所在的页面以便他们可以看到并对其进行编辑时,我收到了我提到的错误。

这是我的意见.py

@verified_email_required()
def home(request):
    usuario = Perfil.objects.filter(user=request.user)
    context = ({"usuario": usuario})
    return render(request, "explore/inicioapp.html", context)

@verified_email_required()
def profile(request, id):
    instance = get_object_or_404(Perfil, id=id)
    form = ProfileForm(instance=instance)
    if request.method == "POST":
        form = ProfileForm(request.POST, instance=instance)
        if form.is_valid():
            perfil = form.save(commit=False)
            perfil.user = request.user
            perfil.save()
            return HttpResponseRedirect("/profile/")
    context = ({"form", form}, {"datos": instance})
    return render(request, "explore/profile.html", context)

models.py

class Perfil(models.Model):
    user = models.OneToOneField(User)
    Sexo = models.CharField(max_length=100)
    Direccion = models.CharField(max_length=100)
    CP = models.CharField(max_length=100)
    Ciudad = models.CharField(max_length=100)
    Estado = models.CharField(max_length=100)
    Pais = models.CharField(max_length=100)
    Telefono = models.CharField(max_length=100)
    Celular = models.CharField(max_length=100)
    PaisPasaporte = models.CharField(max_length=100)
    NumeroPasaporte = models.CharField(max_length=100)
    VigenciaPasaporte = models.DateField(max_length=100)
    ContactoEmergencia = models.CharField(max_length=100)
    TelefonoEmergencia = models.CharField(max_length=100)
    CorreoEmergencia = models.CharField(max_length=100)
    Alergias = models.CharField(max_length=500)

forms.py

class ProfileForm(forms.ModelForm):
    class Meta:
        model = Perfil
        exclude = ["user"]
        widgets = {
            'Sexo': Select(choices=opciones_sexo, attrs={'class': 'selectpicker'}),
            'VigenciaPasaporte': forms.DateInput(attrs={'class': 'datepicker'})
        }
        labels = {
            'Sexo': _("Gender"),
            'Direccion': _("Address"),
            'CP': _("Zip code"),
            'Ciudad': _("City"),
            'Estado': _("State"),
            'Pais': _("Country"),
            'Telefono': _("Phone"),
            'Celular': _("Cellphone"),
            'PaisPasaporte': _("Passport emission country"),
            'NumeroPasaporte': _("Passport number"),
            'VigenciaPasaporte': _("Passport expiration date"),
            'ContactoEmergencia': _("Emergency contact person"),
            'TelefonoEmergencia': _("Emergency contact phone"),
            'CorreoEmergencia': _("Emergency contact email")
        }
    def __init__(self, *args, **kwargs):
        kwargs.setdefault("label_suffix", "")
        super(ProfileForm, self).__init__(*args, **kwargs)
    def clean(self):
        cleaned_data = super(ProfileForm, self).clean()
        sexoseleccionado = cleaned_data.get("Sexo")
        if sexoseleccionado == "none":
            raise forms.ValidationError("You must select a gender to continue.")
        return cleaned_data

网址

url(r'^profile/(?P<user>\d+)$', views.profile, name="profile"),

最后是 HTML 链接

<a class="btn btn-menu" href="{% url "explore:profile" Perfil.id %}">{% trans "My Profile" %}</a>

谢谢!

【问题讨论】:

    标签: python django django-views django-urls


    【解决方案1】:

    您的问题是您的 url 模式正在传递参数用户,但您的视图方法将参数定义为 id。

    url(r'^profile/(?P<user>\d+)$', views.profile, name="profile"),
                       ^^^^
    

    但是,您的视图方法:

    @verified_email_required()
    def profile(request, id):
                         ^^
    

    【讨论】:

      【解决方案2】:

      这只是名称问题。在配置文件的 URL 中,您正在捕获“用户”变量。但是视图本身需要一个“id”参数。使这些保持一致。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-23
        • 1970-01-01
        • 2022-11-14
        • 1970-01-01
        • 2020-05-14
        • 2016-12-08
        • 1970-01-01
        相关资源
        最近更新 更多