Cannot assign the current user to the ForeignKey field in my model.

29 views
Skip to first unread message

Saloni Kalra

unread,
Jun 23, 2018, 2:34:03 PM6/23/18
to django...@googlegroups.com
I am trying to build a feedback application for the teachers by the students. I have a proxy User that will the student. But I am not able to assign the user to the feedback model. I am a newbie. Please help.
Thanks and regards,
Saloni

models.py:

class User(auth.models.User, auth.models.PermissionsMixin):

    def __str__(self):
        return self.username

class Teacher(models.Model):
    teacher_name = models.CharField(blank=False, max_length=100, unique=True, null=False)

    def __str__(self):
        return self.teacher_name

class Subject(models.Model):
    subject_name = models.CharField(blank=False, max_length=100, unique=True, null=False)

    def __str__(self):
        return self.subject_name

class Feedback(models.Model):
    user = models.ForeignKey(User, related_name = 'feedback', on_delete=models.CASCADE, blank=False, null=False)
    teacher = models.ForeignKey(Teacher, related_name = 'feedback', on_delete=models.CASCADE, blank=False, null=False)
    subject = models.ForeignKey(Subject, related_name = 'feedback', on_delete=models.CASCADE, blank=False, null=False)
    param1 = models.PositiveIntegerField(blank=False, null=False)
    param2 = models.PositiveIntegerField(blank=False, null=False)
    param3 = models.PositiveIntegerField(blank=False, null=False)
    param4 = models.PositiveIntegerField(blank=False, null=False)
    param5 = models.PositiveIntegerField(blank=False, null=False)
    param6 = models.PositiveIntegerField(blank=False, null=False)
    param7 = models.PositiveIntegerField(blank=False, null=False)
    param8 = models.PositiveIntegerField(blank=False, null=False)
    param9 = models.PositiveIntegerField(blank=False, null=False)
    param10 = models.PositiveIntegerField(blank=False, null=False)

    def get_absolute_url(self):
        return reverse(
            "feedback:detail",
            kwargs={"username": self.user.username, "pk": self.pk})

    def __str__(self):
        return (self.username + "->" + self.teacher)

    class Meta:
        ordering = ["teacher"]
        unique_together = ["user", "teacher", "subject"]


forms.py:

class FeedbackForm(forms.ModelForm):
    class Meta:
        fields = ("teacher", "subject", "param1", "param2", "param3", "param4",
                    "param5", "param6", "param7", "param8", "param9", "param10")
        model = models.Feedback

    def __init__(self, *args, **kwargs):
        user = kwargs.pop("user", None)
        super().__init__(*args, **kwargs)


CreateView:

class CreateFeedback(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView):
    form_class = FeedbackForm
    model = models.Feedback

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        self.object.save()
        return super().form_valid(form)


Path in urls.py:

path('by/<username>/new',views.CreateFeedback.as_view(),name='create'),


Error:

ValueError at /feedback/by/feedback/new Cannot assign "<SimpleLazyObject: <User: feedback>>": "Feedback.user" must be a "User" instance.


Repository:

Reply all
Reply to author
Forward
0 new messages