1 回答

TA貢獻1780條經驗 獲得超4個贊
你的service是ForeignKey:
? ? service = models.ForeignKey(Services, on_delete=models.CASCADE)
AForeignKey表示您選擇單個元素,而不是多個元素。您使用ManyToManyField[Django-doc]選擇多個元素:
class Professionals_Services(models.Model):
? ? professional = models.ForeignKey(User, on_delete=models.CASCADE)
? ? service = models.ManyToManyField(Service)
您也不應該重寫該post方法,并且可以使用LoginRequiredMixin[Django-doc]來確保用戶已登錄:
from django.contrib.auth.mixins import LoginRequiredMixin
class EditProfileServicesView(LoginRequiredMixin, CreateView):
? ? login_url = reverse_lazy('professionals:login')
? ? model = Professionals_Services
? ? form_class = ProfileServicesUpdateForm
? ? context_object_name = 'services'
? ? template_name = 'accounts/edit-profile.html'
? ? def form_valid(self, form):
? ? ? ? form.instance.user = self.request.user
? ? ? ? return super().form_valid(form)
在您中,Form您還應該返回清理后的數據:
class ProfileServicesUpdateForm(forms.ModelForm):
? ? service = forms.ModelMultipleChoiceField(required=False, queryset=Services.objects.all())
? ? class Meta:
? ? ? ? model = Professionals_Services
? ? ? ? fields = ['service']
? ? def clean(self):
? ? ? ? # this condition only if the POST data is cleaned, right?
? ? ? ? cleaned_data = super(ProfileServicesUpdateForm, self).clean()
? ? ? ? print(cleaned_data.get('service'))
? ? ? ? return cleaned_data
注意:通常使用
settings.AUTH_USER_MODEL
[Django-doc]來引用用戶模型比直接使用User
模型 [Django-doc]更好。
注意:Django 中的模型是用PerlCase編寫的,而不是Snake_case,因此您可能需要將模型從 重命名
Professionals_Services
為ProfessionalService
。
注意:通常 Django 模型有一個單一的名稱,所以
Services
而不是Service
.
添加回答
舉報