有单词学习应用程序。当前用户使用一组单词创建自己的类别。 这个想法是为当前用户自定义选择表单中的选项列表。
模型.py
class ModelWords(models.Model):
class Meta:
verbose_name = 'Words'
verbose_name_plural = 'Words'
your_language_name = models.CharField(max_length=40)
eng_name = models.CharField(max_length=40)
cat = models.ForeignKey('ModelCatsWords', on_delete=models.CASCADE, null=True)
author = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
def __str__(self):
return self.your_language_name
class ModelCatsWords(models.Model):
class Meta:
verbose_name = 'Categories'
verbose_name_plural = 'Categories'
name = models.CharField(max_length=100, db_index=True)
author = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('category', kwargs={'cat_id': self.pk})
有两种形式。第一个表单添加单词,有一个用户类别列表可供选择,另一个表单添加类别。
表格.py
class WordsFrom(forms.ModelForm):
cat = forms.ChoiceField(choices=[], required=False, label="select cat")
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(WordsFrom, self).__init__(*args, **kwargs)
self.fields['cat'].choices = ModelCatsWords.objects.filter(author=self.request.user.id).values_list('name')
for visible in self.visible_fields():
visible.field.widget.attrs['placeholder'] = visible.field.label
class Meta:
model = ModelWords
fields = ['your_language_name', 'eng_name','cat']
labels = {
'your_language_name' : 'word on your language',
'eng_name' : 'word on english',
'cat' : 'categorie'
}
class ModelCatsWordsForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['name'].widget.attrs['placeholder'] = 'categorie'
class Meta:
model = ModelCatsWords
fields = ['name']
labels = {
'name': 'Categorie'
}
有views.py
class WordsFormView(View):
def get(self,request):
form_for_word = WordsFrom(request=request)
form_for_categorie = ModelCatsWordsForm()
return render(request,'app/appendwords.html',context={'form':form_for_word,'form_for_categorie':form_for_categorie})
请帮助一些代码示例
你已经可以在views.py中使用这个逻辑了
‘’’ 单词形式 = WordsFrom()
如果 self.request.user.is_authenticated: wordsform.fields['cat'].queryset = ModelCatsWords.objects.filter(author_id=self.request.user.id) '''