Сохранение значений, установленных в интерфейсе, в базу данных Django - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть веб-сайт, который позволяет пользователям выбирать несколько увлечений, которые им нравятся.В настоящее время веб-сайт загружает эти хобби из модели и перечисляет их с флажком.То, что я хочу сделать, - это когда пользователь сохраняет форму, он также должен сохранить эти значения флажков в базе данных - т. Е. Если они отмечают «Футбол», база данных должна сохранить тот факт, что этот пользователь любит футбол.Я новичок в Django и Python, поэтому не слишком уверен, как это сделать.Вот код, который я использую.Это файл Models.py для хобби:

TYPES = (
        ("Football", "Football"),
        ("Cricket", "Cricket"),
        ("Swimming", "Swimming"),
        ("Cycling", "Cycling")
        )

class Hobby(models.Model):
    myfield = models.CharField(max_length=50, choices = TYPES, default=TYPES[0], null=True)
    football = models.BooleanField(default = False)
    cricket = models.BooleanField(default = False)
    swimming = models.BooleanField(default = False)
    cycling = models.BooleanField(default = False)

Это соответствующий файл views.py:

def profile(request, user):
    # use this for debugging:
    # import pdb; pdb.set_trace()
    if 'email' in request.POST:
        email = request.POST['email']
        gender = request.POST['gender']
        dob = request.POST['dob']
##        hobby = request.POST['hobby']
        if user.profile:
            user.profile.email = email
            user.profile.gender = gender
            user.profile.dob = dob
##            user.profile.hobby = hobby
            user.profile.save()
        else:
            profile = Profile(email=email, gender=gender, dob=dob)
            profile.save()
            user.profile = profile
        user.save()
    context = {
        'appname': appname,
        'username': user.username,
        'profile' : user.profile,
        'all_hobbies': [hobby[0] for hobby in TYPES],
        'loggedin': True
    }
    return render(request, 'mainapp/profile.html', context)

И, наконец, код HTML / JS для отображения информации:

<span class="fieldname">Hobbies</span>
        {% for hobby in all_hobbies %}

                <input type="checkbox" name={{hobby}} value={{hobby}}> {{hobby}}<br>
        {% endfor %}

<input type='submit' value='Save'>

Мне нужен способ проверить, были ли отмечены флажки, и если да, изменить значение BooleanField в базе данных / модели на True или False.Тем не менее, я не уверен, где это сделать, в представлениях или коде JS.Может ли кто-нибудь помочь мне здесь?Большое спасибо.

1 Ответ

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

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

model.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)

forms.py

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

views.py

def profile(request,user):

    try:
        profile_object = Profile.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.DoesNotExists:
        context = {
            "form": form,
            "profile": profile_object,
        }
        return render(request, 'mainapp/profile.html', context)

profile.html

<form action="myurl/{{profile.id}}/" method="post">
{% csrf_token %}
{% form.as_p %}
<input type="submit" value="OK">
</form>      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...