0
我試圖建立一個配置文件頁面,其中User
可以填寫Teacher
模型。Django CreateView/UpdateView與OnetoOne字段,取決於如果記錄存在
我的老師模型,model.py
class Teacher(models.Model):
user = models.OneToOneField(User, on_delete=models.PROTECT, related_name='Teacher')
rate = models.CharField(max_length=200)
availability = models.BooleanField(default=False)
forms.py
class TeacherCreate(CreateView):
user_id = request.user.id #INCORRECT! Needs something to remember current user id.
model = Teacher
fields = ['rate','availability']
編輯:我也嘗試添加:
def form_valid(self, form):
form.instance.user = self.request.user
return super(TeacherCreate, self).form_valid(form)
我們不允許用戶在此創建視圖中更改其ID。實際上,我相信這應該是當前用戶ID user_id
,它由request.user.id
給出。
teacher_form.html
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<span color="red">{{ field.errors }}</span>
<label>
{{ field.label_tag }}
</label>
<div>{{ field }}</div>
</div>
{% endfor %}
<button type="submit">Submit</button>
</form>
現在的問題是,當我運行它,我得到的錯誤:
NOT NULL constraint failed: users_teacher.user_id
我相信這是因爲我沒有指定USER_ID 。
我怎麼想它的工作:
首先,檢查的老師已經在數據庫中的記錄。例如。如果Teacher表中有一行,並且user_id =當前用戶。
如果教師有個人資料 - >調用更新視圖。
如果教師沒有配置文件 - >使用創建視圖。
我得到的錯誤:UNIQUE約束失敗:users_teacher.user_id當我點擊保存按鈕 – Roma
可能是您嘗試添加,存在'Teacher.user'的配置文件,如果是test db,請嘗試'Teacher.objects.all()。delete()' –
我看到,這個嬰兒確實創建了一個新行。這導致我到最後一部分。如何在瀏覽器中擁有相同的頁面,更加智能,並決定是否需要執行更新視圖或創建視圖 – Roma