django - 在 UpdateView 中设置表单的实例
问题描述
我有一个带有几个表单的 UpdateView,我试图了解如何为另一个表单设置实例,因为第一个表单工作得很好,但第二个表单总是空的,我不知道如何设置实例那个模型。
class ProfileUpdateView(UpdateView):
# model = User
queryset = User.objects.all()
form_class = UserForm
second_form_class = ClientForm
template_name = 'accounts/update.html'
def get_object(self):
user = get_object_or_404(User , username__iexact=self.kwargs.get('username'))
return user
def get_context_data(self, **kwargs):
user = self.object
profile = Client.objects.get(id = user.clients.id)
context = super(ProfileUpdateView, self).get_context_data(**kwargs)
if user.is_client and 'ClientForm' not in context:
context['client_form'] = self.second_form_class(self.request.GET, instance=profile )
return context
楷模
class User(AbstractUser):
gender_choice =(
('Male','Male'),
('Female','Female'),
)
is_artisan = models.BooleanField('artisan status', default=False)
is_client = models.BooleanField('client status', default=False)
avatar = models.ImageField(null=True ,blank=True)
birth_day = models.DateField(null=True,blank=True)
birth_location = models.CharField(max_length=30, null=True ,blank=True)
adresse = models.CharField(max_length=30, null=True ,blank=True)
gender = models.CharField(max_length=6,choices=gender_choice,)
phone = models.CharField(max_length=10 ,null=True ,blank=True)
class Client(models.Model):
client_choice = (
('erson','person'),
('company','company'),
)
client_type = models.CharField(max_length=10,choices=client_choice,)
user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE, related_name='clients')
形式
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name', 'last_name', 'email','avatar','adresse','birth_location','birth_day' ,'gender' ,'phone')
class ClientForm(forms.ModelForm):
class Meta:
model = Client
fields = ('client_type',)
现在的问题是如何/在哪里可以设置第二个表单的实例以及第一个表单实例设置在哪里。
解决方案
这是 get_context_data 中的错字吗?应该是:
if user.is_client and 'client_form' not in context:
context['client_form'] = self.second_form_class(self.request.GET, instance=profile)
第一个表单在 UpdateView 的超类 FormMixin.get_context_data 中设置(依次调用 FormMixin.get_form())。FormMixin 的文档
推荐阅读
- java - 如何在连接 MySQL 数据库之前制作加载场景?
- ag-grid - AG Grid:如何将滚动粘贴在底部
- javascript - 如何从字符串中获取奇数和偶数位置字符?
- python - 如何在 MySql 中添加与现有列相关的新列?
- python - 对标签使用 pack() 几何管理器时抑制定义的帧大小
- python - 在 OpenCV 中无法确定物体的凹度
- mysql - 为什么 MySQL 查询有两个 WHERE 这么慢
- javascript - it 语句在循环迭代中为每个期望语句 mocha
- node.js - 为什么验证在猫鼬的字段更新上运行?
- sql - 多行插入查询问题寻找更有效的方法