обновить существующую модель в БД - PullRequest
1 голос
/ 12 февраля 2020

Привет всем, у меня есть проблема. Я хочу обновить конкретную c модель в БД, как будто я хочу, чтобы пользователь изменил свой номер телефона и картинку ... et c конкретный c один, не все модель, и я не могу сделать это в views.py, ниже мой код, может помочь PLS?

models.py:

    # Create your models here.


    PHONE_REGEX = '^[0-9]*$'


    class Profile(AbstractUser):
        phone_number = models.CharField(
            max_length=14,
            help_text='Optional',
            blank=True,
            validators=[
                RegexValidator(
                    regex=PHONE_REGEX,
                    message=
                    'phone number must be only digit and from 10 to 14 digits only',
                    code='invalid-phone number'),
                MinLengthValidator(10)
            ])
        picture = models.ImageField(upload_to='upload/', blank=True, default=False)
        email = models.EmailField(max_length=254,
                                  unique=True,
                                  help_text='Required, pls enter a valid Email')

forms.py:

 class Change_pic_form(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ('picture', )

Views.py здесь фрагмент этого кода

@login_required
def Change_picture(request):
    instance = Profile.objects.get(pk=request.user.pk)
    form = Change_pic_form(request.POST or None, instance=instance)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
        return redirect('change_pic')
    else:
        form = Change_pic_form(instance=instance)
    context = {
        'picture': instance.picture,
        'form': form,
        'instance': instance,
    }
    return render(request, 'account/change_picture.html', context)

может быть, я не дал понять, извините за это, мой сайт работает ОК У меня есть логин, регистрация ... et c Я имел в виду, что у меня есть страница профиля пользователя, где пользователь может видеть свою информацию, и я хочу, чтобы пользователь, если он хочет обновить свою информацию, такую ​​как номер телефона, изображение ... et c

Ответы [ 3 ]

1 голос
/ 12 февраля 2020

Сначала необходимо выполнить makemigrations команду

python manage.py makemigrations <app_name>

. Она создаст файл миграции для всех обновленных полей в модели, и вы сможете увидеть его в папке миграций этого указанного c приложения.

Затем вам нужно перенести указанный файл миграции c ... Например, файл миграции вашей требуемой модели - 0002_auto_20170808_2327, затем выполнить команду ниже

python manage.py migrate <app_name> 0002_auto_20170808_2327
0 голосов
/ 14 февраля 2020

Спасибо, кто-нибудь помог, я нашел решение для изображения или файла, которые вы должны написать в запросе представления. ФАЙЛЫ и в вашей форме, что внутри шаблона enctype = "multipart / form-data" теперь работает нормально.

Views.py

def Change_picture(request, pk):
    prof = get_object_or_404(Profile, pk=pk)
    if request.method == "POST":
        form = Change_pic_form(request.POST,
                               request.FILES,
                               instance=request.user)
        if form.is_valid():
            form.save()
            messages.success(request, f'Your Picture updated successfully')
            return redirect('profile')
    else:
        form = Change_pic_form(instance=request.user)
    return render(request, 'account/change_picture.html', {
        'prof': prof,
        'form': form
    })

Шаблон

<form enctype="multipart/form-data" method="POST">
            {% csrf_token %}
            <br />
            {{ form.as_p }}
            <button type="submit">Change!</button>
        </form>
0 голосов
/ 12 февраля 2020

У вас есть модель и форма, теперь вам нужно отобразить форму в шаблоне. Прочитайте эту страницу из документов, чтобы понять, как отобразить форму в шаблоне, и обработать представление формы в представлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...