我在處理如何操作時遇到了一些麻煩。我盡了最大的努力搜索谷歌沒有任何運氣。在is_valid()之前設置表格字段值()
我將開始與一些代碼,並解釋什麼,我試圖做的,因爲我去:
models.py
class Action(models.Model):
title = models.CharField(max_length=200)
owner = models.ForeignKey(User, related_name='actions')
created_by = models.ForeignKey(User, related_name='+', editable=False)
modified_by = models.ForeignKey(User, related_name='+', editable=False)
class ActionForm(ModelForm):
class Meta:
model = Action
views.py
默認情況下,有一個下拉字段的所有者。我有一個圖標,允許用戶在文本字段中輸入新的用戶名,而不是所有者。我檢查是否提交了owner_new
,如果有,請創建該用戶。然後我需要將owner
字段設置爲該值,以便form.is_valid()
將成立。
def action_create(request):
if request.method == 'POST':
form = ActionForm(request.POST)
# check if new user should be created
if 'owner_new' in request.POST:
# check if user already exists
user = User.objects.get(username=request.POST.get('owner_new'))
if not user:
user = User.objects.create_user(request.POST.get('owner_new'))
# HERE IS WHERE I'M STUMPED
form.owner = user.id
if form.is_valid(): # THIS FAILS BECAUSE form.owner ISN'T SET
action = form.save(commit=False)
action.created_by = request.user
action.modified_by = request.user
action.save()
return redirect('action_register:index')
else:
form = ActionForm()
return render(request, 'actions/create.html', {'form': form})
首先,感謝您展示'get_or_create()'函數。我不知道那是存在的。其次,對於form.data ['owner'] = user',我得到一個錯誤'This QueryDict instance is immutable',這是我一直在運行的問題。 Django真的不想讓我搞亂數值。 – Jared
是有用的編輯? – karthikr
是的,非常感謝您的幫助。一個小的變化是'updated_data.update('owner','user')'必須被調用爲'updated_data.update(owner = user)'。 – Jared