django - профиль пользователя используется в качестве внешнего ключа в другой модели. как показать зарегистрированного пользователя в форме? - PullRequest
0 голосов
/ 30 сентября 2019

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

Это мой models.py для загрузки формы

class uploadmeta(models.Model):

    path = models.ForeignKey(Metadataform, on_delete=models.CASCADE)

    user_profile = models.ForeignKey(UserProfile, on_delete=models.CASCADE, null=True, unique=True, verbose_name='Username')

    tar_gif = models.FileField(upload_to=nice_user_folder_upload, verbose_name="Dataset") # validators=[FileExtensionValidator(allowed_extensions=['tar', 'zip'])]


    def get_absolute_url(self):
        return reverse('file_list', kwargs={'pk': self.pk})

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

    Assigned_Group= models.CharField(max_length=500, choices=Group_choices, default='Please Select')

    def __str__(self):
        return self.user.username

forms.py

class uploadmetaform(forms.ModelForm):
        count = Metadataform.objects.all().latest('id').id #To know the id of latest object
        data  = Metadataform.objects.all().filter(id=count) #return the queryset with only latest object
        path  = forms.ModelChoiceField(queryset=data, initial=0, label='Meta ID')


        def __init__(self, *args, **kwargs):
            super(uploadmetaform, self).__init__(*args, **kwargs)
            count = Metadataform.objects.all().latest('id').id
            data = Metadataform.objects.all().filter(id=count)
            self.fields['path'] = forms.ModelChoiceField(queryset=data, initial=0, label='Meta ID')


        class Meta:
            model = uploadmeta
            fields = ['path', 'user_profile','tar_gif',]
def uploaddata(request):
        if request.user.is_authenticated:

                 if request.method == 'POST':
                        uploadmetaform(request=request)
                        form = uploadmetaform(request.POST, request.FILES, request=request)
                        if form.is_valid():
                                form.save()

                                return redirect('file_list')
                else:
                        form = uploadmetaform()
                return render(request, 'uploaddata.html', {
                        'form': form
                })
        else:
                return render(request, 'home.html')

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Я не уверен, есть ли какой-либо прямой способ сделать это или нет, но вы всегда можете передать пользовательский объект в форму (в вашем случае залогиненный пользователь) Это может помочь!

form = uploadmetadata(**{'user':request.user})

ВТаким образом, вы можете передать пользовательский объект в форму django. Это может помочь!

0 голосов
/ 30 сентября 2019

Вы можете получить доступ к зарегистрированному пользователю как request.user, поэтому, если вы хотите, чтобы имя пользователя вы могли сделать request.user.username, сейчас, если вы хотите его в форме, вы можете передать аргумент ключевого слова, подобный этому uploadmetaform(request=request), и в вашей форме вы можете получить к нему доступ

class uploadmetaform(forms.ModelForm):
        count = Metadataform.objects.all().latest('id').id #To know the id of latest object
        data  = Metadataform.objects.all().filter(id=count) #return the queryset with only latest object
        path  = forms.ModelChoiceField(queryset=data, initial=0, label='Meta ID')
        username=forms.CharField()

    def __init__(self, *args, **kwargs):
        super(uploadmetaform, self).__init__(*args, **kwargs)
        username=kwargs.get("request").user.username
        self.fields['username'] = username
        count = Metadataform.objects.all().latest('id').id
        data = Metadataform.objects.all().filter(id=count)
        self.fields['path'] = forms.ModelChoiceField(queryset=data, initial=0, label='Meta ID')

или в шаблоне django, если пользователь аутентифицирован, вы можете сделать {{ user.get_username }}

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