Как переключить форму с предварительно заполненным содержимым с помощью кнопки редактирования в django - PullRequest
0 голосов
/ 25 февраля 2020

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

модели

class Clinic(models.Model):
    practitioner = models.OneToOneField(User, on_delete=models.CASCADE)
    lat = models.FloatField(null=True, blank=True)
    lng = models.FloatField(null=True, blank=True)
    web = models.CharField(null=True, blank=True, max_length=128)
    name = models.CharField(max_length=128, )
    phone = PhoneNumberField()
    description = models.TextField(max_length=5000)
    street = models.CharField(max_length=128, )
    city = models.CharField(max_length=128, )

    def __str__(self):
        return self.name

    def save(self):
        super().save()


class Reviews(models.Model):
    title = models.CharField(max_length=128)
    body = models.TextField(max_length=500)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    clinic = models.ForeignKey(Clinic,
                               null=True,
                               blank=True,
                               on_delete=models.CASCADE)

Форма

class ReviewForm(forms.ModelForm):
    class Meta:
        model = Reviews
        fields = (
            'title',
            'body',
        )

Вид

def clinic_profile(request, clinic_id):

    clinic = Clinic.objects.filter(pk=clinic_id)
    form = ReviewForm(request.POST)
    if request.method == 'POST':
        if form.is_valid():
            r_clinic = Clinic.objects.get(pk=clinic_id)
            title = form.cleaned_data.get("title")
            body = form.cleaned_data.get("body")
            review = Reviews(title=title,
                             body=body,
                             author=request.user,
                             clinic=r_clinic)
            review.save()
            messages.success(request, f'Thank you for leaving a review!')

    clinic_reviews = Reviews.objects.filter(clinic=clinic_id)

    latlng = {
        "lat": clinic[0].lat,
        "lng": clinic[0].lng,
        "name": clinic[0].name
    }

    def get_mods():
        profile = Profile.objects.filter(user=Clinic.objects.get(
            pk=clinic_id).practitioner)
        mods = profile[0].mods.all().values('name') if profile else []

        mods = [(q['name']) for q in mods]
        return mods

    return render(
        request, 'clinic_profile.html', {
            'clinic': clinic,
            'mods': get_mods,
            'latlng': latlng,
            'api_key': api_key,
            'reviews': clinic_reviews,
            'form': form,
        })

Снимок экрана

screenshot

...