AttributeError в / addimam объект int не имеет атрибута _meta Django - PullRequest
0 голосов
/ 21 января 2020

Я получил эту ошибку, когда я пытаюсь отправить данные в моем представлении. Masjid получает данные от определенного c пользователя входа в систему. Я не могу понять, где происходит ошибка, потому что моя форма позволяет мне просматривать указанного пользователя c.

form = ImamForm(request.POST, instance=masjid)

сообщение об ошибке приходит с этой строки

enter image description here

enter image description here

forms.py

class ImamForm(forms.ModelForm):

    def __init__(self,user, *args, **kwargs):
        super(ImamForm, self).__init__(*args, **kwargs)
        try:
            masjid_id = Info.objects.values_list('user_id', flat=True).get(user=user)
            self.fields['masjid'].queryset = Info.objects.filter(user=masjid_id)
            print(masjid_id)

        except Info.DoesNotExist:
            ### there is not userextend corresponding to this user, do what you want 
            pass




    class Meta:
        model = Imam
        exclude = ('updated_at', 'created_at', 'user')

views.ppy

class NewImam(CreateView):
    # template_name = "addimam.html"
    # model = Imam
    # form_class = ImamForm
    # #success_url = reverse_lazy('person_changelist')

    # def form_valid(self, form):

    #     #if not UserProfile.objects.filter(recruiter=self.request.user).exists(): 
    #     p = form.save(commit=False)
    #     p.user = self.request.user
    #     p.save()
    #     messages.success(self.request, 'The Imam Details Has Been Added Successully!')
    #     return redirect('addimam')
    #     # else:
    #     #     messages.warning(self.request, 'The Profile has been Added Before!')
    #     #     return redirect('recruiter:edit_recruiter_profile')

    def get(self, request, *args, **kwargs):
        form = ImamForm(user=self.request.user)
        context = {'form': form}
        return render(request, 'addimam.html', context)

    def post(self, request, *args, **kwargs):
        user = self.request.user
        print(user)
        user = CustomUser.objects.get(email=user)
        masjid = user.id
        print(type(masjid))
        form = ImamForm(request.POST, instance=masjid)
        print(form)
        if form.is_valid():
            p = form.save(commit=False)
            p.user = self.request.user
            p.save()
            messages.success(self.request, 'The Project Details Has Been Added Successully!')
            return redirect('addimam')
        return render(request, 'addimam.html', {'form': form})

models.py

class Imam(models.Model):

    CERTIFICATE = (
        ('PhD', 'PhD'),
        ('MSc', 'MSc'),
        ('Bsc', 'Bsc'),

    )

    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
    masjid = models.ForeignKey(Info, related_name='imam', on_delete=models.CASCADE)
    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=20)
    imam_address = models.TextField(blank=False, null=False)
    phone_no = models.CharField(max_length=20)
    certificate = models.CharField(max_length=50, choices=CERTIFICATE)
    occupation = models.CharField(max_length=50, blank=False, null=False)
    no_of_wives = models.IntegerField(blank=False, null=False)
    no_of_children = models.IntegerField(blank=False, null=False)
    created_at = models.DateTimeField(auto_now_add=True)
    update_at = models.DateTimeField(auto_now=True)

1 Ответ

0 голосов
/ 21 января 2020

Поскольку вы переопределили метод __init__(...), Django ожидает аргументы в другом порядке.

Поэтому измените

form = ImamForm(request.POST, instance=masjid)

на

form = ImamForm(<b>masjid,request.POST</b>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...