Получить данные флажок и сохранить его в базе данных Джанго

Обновить

April 2019

Просмотры

328 раз

1

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

models.py

 from django.db import models
    from django.contrib.auth.models import User
    from django.dispatch import receiver
    from django.db.models.signals import post_save



    class Stock(models.Model):
        name = models.CharField(max_length = 50)
        ticker = models.CharField(max_length = 50)

        def __str__(self):
            return self.name

    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        followed_stocks = models.ManyToManyField(Stock, blank=True)

        def __str__(self):
            return self.user.username

        @receiver(post_save, sender=User)
        def update_user_profile(sender, instance, created, **kwargs):
            if created:
                Profile.objects.create(user=instance)
            instance.profile.save()

    class Article(models.Model):
        stock = models.ForeignKey(Stock, on_delete=models.CASCADE, default = 0 )
        title = models.CharField(max_length = 200)
        url = models.URLField()
        description = models.TextField()

        def __str__(self):
            return self.title

forms.py:

class StockFollowForm(forms.Form):
    stocks = forms.ModelMultipleChoiceField(required =False,
                                           widget=forms.CheckboxSelectMultiple,
                                           queryset=Stock.objects.all())

шаблон:

{%  block body %}
    <div class = "container">
        <h2 class = "text-center">Register</h2>

        <form method = 'post'>
            {% csrf_token %}
            {{ form }}
            <div class = "text-center">
                <br/>
                <button class="btn btn-primary" type = 'submit'>Follow</button>
            </div>

        </form>

    </div>

{% endblock %}

views.py:

 def follow_coins(request):
        if request.method == "POST":
            form = StockFollowForm(request.POST)
            if form.is_valid():
                request.user.profile.followed_stocks = form.cleaned_data.get('stocks_selected')
                request.user.save()
                return redirect('index')
        else:
            form = StockFollowForm()
            return render(request, 'core/test.html',{'form': form})

Это отображает успешно форма все StockS рядом с флажками, но как на самом деле захватить данные с флажком и сохранить его в свою базу данных в testпредставлении?

1 ответы

0

You are saving the user in your view, but you probably need to save the profile as well since the field followed_stocks is in the profile.

request.user.save()
request.user.profile.save()   # add this line

Let me know if that helps.

Связанные вопросы