Как я могу оценить и оставить отзыв об услугах врача?

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

my models.py

class User(AbstractUser):
    is_doctor = models.BooleanField(default=False)
    is_patient = models.BooleanField(default=False)



class Doctor(models.Model):
    user = models.OneToOneField(
        User, on_delete=models.CASCADE, primary_key=True)
    number_phone = models.CharField(
        _('االهاتف :'), max_length=50, blank=True, null=True)
    last_login = models.DateTimeField(auto_now_add=True, null=True)


class Patient(models.Model):
    user = models.OneToOneField(
        User, on_delete=models.CASCADE, primary_key=True)
    name = models.CharField(max_length=50, verbose_name="الاسم ")
    last_login = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return '%s' % (self.user.username)


class Comments(models.Model):
    created_by = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='comment')
    # co_email = models.ForeignKey(
    #     User, on_delete=models.CASCADE, related_name='comment')
    co_body = models.TextField(max_length=400, verbose_name='التعليق')
    rate = models.IntegerField(default=0)
    created_dt = models.DateTimeField(auto_now_add=True)
    active = models.BooleanField(default=True)

    post = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='comments')

    def __str__(self):
        return 'علق {} على {}'.format(self.created_by.username, self.post)



forms.py

class Commentair(forms.ModelForm):

    co_body = forms.CharField(widget=forms.Textarea(
        attrs={'rows': 3, 'placeholder': 'ما هو تعليقك عل الدكتور  ؟'}), label='التعليق')

    class Meta:
        model = Comments
        fields = ('co_body','rate')

html

Мне интересно, как можно сделать так, чтобы просмотр обрабатывал рейтинг звезд и отзывы. если есть какая-либо помощь, пожалуйста, напишите это ниже и объясните это, пожалуйста, и спасибо

Я бы сначала внес некоторые изменения. Позже, если вам не понравятся радиокнопки, вы всегда сможете отредактировать их с помощью css.

models.py (созданный и активный blank=True, поэтому передавать значения не нужно)

class Comments(models.Model):
    created_by = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='comment')
    # co_email = models.ForeignKey(
    #     User, on_delete=models.CASCADE, related_name='comment')
    co_body = models.TextField(max_length=400, verbose_name='التعليق')
    rate = models.IntegerField(default=0)
    created_dt = models.DateTimeField(auto_now_add=True, blank=True)
    active = models.BooleanField(default=True, blank=True)

    post = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='comments')

    def __str__(self):
        return 'علق {} على {}'.format(self.created_by.username, self.post)

forms.py (я бы добавил радиокнопки в форму)

class Commentair(forms.ModelForm):
    CHOICES = [
        (1, 'Option 1'),
        (2, 'Option 2'),
        (3, 'Option 3'),
        (4, 'Option 4'),
        (5, 'Option 5'),
    ]
    co_body = forms.CharField(widget=forms.Textarea(
        attrs={'rows': 3, 'placeholder': 'ما هو تعليقك عل الدكتور  ؟'}), label='التعليق')
    rate = forms.ChoiceField(widget=forms.RadioSelect, choices=CHOICES,)

    class Meta:
        model = Comments
        fields = ('co_body','rate')
    
    # This part is becuase you have to pass logged user
    def __init__(self, *args, **kwargs):
        self._user = kwargs.pop('user')
        super(Commentair, self).__init__(*args, **kwargs)

    def save(self, commit=True):
        inst = super(Commentair, self).save(commit=False)
        inst.user = self._user
        if commit:
            inst.save()
            self.save_m2m()
        return inst

views.py

def rate_page(request):
    if request.method == 'POST':
        form = Commentair(request.POST, user=request.user)
        if form.is_valid():
            form.save()
            # form is saved. 
            # return what ever you like (other page, message, etc.)
    form = Commentair(user=request.user)
    return render(request, tmpl_name, {'form': form}
Вернуться на верх