Django не будет хранить authUser, упоминаемый как внешний ключ в моей модели - PullRequest
2 голосов
/ 13 октября 2019

Я создал свою модель, на которую authUser ссылается как на внешний ключ, затем с помощью API формы django я пытаюсь сохранить данные в моей БД, но мое поле пользователя остается пустым.

Я использовал встроенный API-интерфейс FORMчтобы получить загруженный файл и перед сохранением моего файла, я также сохраняю имя файла. Я пытался сделать то же самое для userField, но Django бросить ValueError.

Models.py

class sample(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True ,default=1)
    submit_time = models.DateTimeField(auto_now=True)
    file_name = models.CharField(max_length=1024)
    score = models.FloatField(default=0.0)
    is_pending = models.BooleanField(default=True)
    is_complete = models.BooleanField(default=False)
    json_URL = models.FilePathField()
    sample = models.FileField(upload_to='samples/')

Views.py

@login_required
def upload(request):
    if request.method == 'POST':
        file = request.FILES['sample']
        form = SampleForm(request.POST, request.FILES)
        if form.is_valid():
            new_sample = form.save(commit=False)  
            new_sample.file_name = file.name
            new_sample.user = User.id #throws ValueError Cannot assign  "sample.user" must be a "User" instance.
            form.save()
            return redirect('reports')
        else:
            print("form is invalid")
    else:
        form = SampleForm()
    if request.method == 'GET':
        return render(request, 'upload2.html', {'form': form})

forms.py

class SampleForm(forms.ModelForm):
    class Meta:
        model =sample
        fields=('sample',)

Моя цель - сохранить идентификатор пользователя в моей БД, чтобы я знал, кто загрузил файл.

1 Ответ

1 голос
/ 13 октября 2019

Вы должны использовать request.user для объекта new_sample.user или request.user.id (или request.user.pk) для атрибута request.user_id, например:

# …

new_sample = form.save(commit=False)  
new_sample.file_name = file.name
new_sample.user = <b>request.user</b>
form.save()
return redirect('reports')

# &hellip;

Используя User.id,вы получаете ссылку на поле User модель , а не объект.

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