Проблема с сохранением данных в Django Forms - PullRequest
0 голосов
/ 12 декабря 2018

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

Файл models.py:

my_choices = (
    (0, "None"),
    (1, "Football"),
    (2, "Cricket"),
    (3, "Swimming"),
    (4, "Cycling"),
)

class Hobby(models.Model):
    user = models.ForeignKey(Profile, on_delete=models.DO_NOTHING)
    field = models.IntegerField(choices=my_choices, default=0)

Функция views.py для профиля:

def profile(request,user):

    try:
        profile_object = Profile.objects.get(id=user)

        if request.method.POST:
            form = HobbyForm(request.POST)
            if form.is_valid():
                profile_object.field = form.cleaned_data["field"]
                profile_object.save()

                context = {
                        "form": form,
                        "profile": profile_object,
                    }
                return render(request, 'mainapp/profile.html', context)

            else:
                context = {
                        "form": form,
                        "profile": profile_object,
                    }
                return render(request, 'mainapp/profile.html', context)
        else:
            context = {
                        "form": form,
                        "profile": profile_object,
                    }
            return render(request, 'mainapp/profile.html', context)

    except Profile.DoesNotExist:
        context = {
            "form": form,
            "profile": profile_object,
        }
        return render(request, 'mainapp/profile.html', context)

Код forms.py дляФактическая форма:

class HobbyForm(ModelForm):
    class Meta:
        model = Hobby
        fields = ["field"]

И страница profile.html:

<form action="myurl/{{profile.id}}/" method="post">
{% csrf_token %}
{% form.as_p %}
<input type="submit" value="OK">
</form>      

Когда я запускаю этот код, я получаю следующую ошибку:

TypeError at /profile/
int() argument must be a string, a bytes-like object or a number, not 'Member'
Request Method: GET
Request URL:    http://localhost:8000/profile/
Django Version: 2.1.3
Exception Type: TypeError
Exception Value:    
int() argument must be a string, a bytes-like object or a number, not 'Member'
Exception Location: C:\Users\install\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\models\fields\__init__.py in get_prep_value, line 965
Python Executable:  C:\Users\install\AppData\Local\Programs\Python\Python36\python.exe
Python Version: 3.6.3
Python Path:    
['C:\\Users\\install\\Documents\\coursework\\Mumin',
 'C:\\Users\\install\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip',
 'C:\\Users\\install\\AppData\\Local\\Programs\\Python\\Python36\\DLLs',
 'C:\\Users\\install\\AppData\\Local\\Programs\\Python\\Python36\\lib',
 'C:\\Users\\install\\AppData\\Local\\Programs\\Python\\Python36',
 'C:\\Users\\install\\AppData\\Roaming\\Python\\Python36\\site-packages',
 'C:\\Users\\install\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages']
Server time:    Wed, 12 Dec 2018 17:09:26 +0000

По существуя пытаюсь сделать так, чтобы авторизованный пользователь мог добавить интересующие его хобби и сохранить их в базе данных.Хобби предопределены в моделях.По какой-то причине этот код не достигает того, чего я хочу, и я не уверен, почему.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 12 декабря 2018

<form action="myurl/{{profile.id}}/" method="post"> в этой строке вы пытаетесь передать id в view.py, но на самом деле вы этого не делаете.Правильный способ сделать это -

{% url 'yoururlnameassosiatedwithdesiredview' id=id %}

И здесь возникает ошибка:

profile_object = Profile.objects.get(id=user)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...