今晚我的另一个问题,我希望我能充分解释:
我的"models.py"有三门课:
class Customer(models.Model):
full_name = models.CharField(max_length=100, null=True, unique=True)
short_name = models.CharField(max_length=8, null=True, unique=True)
class Project(models.Model):
customer = models.ForeignKey(Customer, null=False, on_delete=models.CASCADE)
name = models.CharField(max_length=255, null=True, unique=True)
...
class Entry(models.Model):
user = models.ForeignKey(User, null=True, blank=False, on_delete=models.CASCADE)
customer = models.ForeignKey(Customer, null=True, blank=False, on_delete=models.CASCADE)
project = models.ForeignKey(Project, null=True, blank=False, on_delete=models.CASCADE)
date = models.DateField()
shortText = models.CharField(max_length=100, null=False, blank=False)
...
注意:一个客户可以有多个项目。
在我的一个网站上,有一张桌子,每个"客户"旁边都有按钮。计划是,如果用户可以编写并保存他的"条目",它应该会引导我进入另一个页面。现在,按钮/链接中的PrimaryKey包含"客户"的ID。
我的问题是:是否可以将"项目"(在下拉菜单中(的选择限制为单击的"客户"?创建ModelForm是正确的做法吗?
感谢大家,祝大家晚安!
好吧,不知道这是否是正确的方法,但我找到了解决问题的方法:
-
为我的视图函数编写了一个"forms.ModelForm"。。。
class EntryForm(ModelForm): class Meta: model = Entry fields = '__all__' def __init__(self, *args, pk, **kwargs): super().__init__(*args, **kwargs) self.fields['project'].queryset = Project.objects.filter(customer_id=pk)
-
将我的ModelForm插入视图函数。。。
def WriteEntry(request, pk): form = EntryForm(pk=pk) if request.method =='POST': form = EntryForm(request.POST, pk) if form.is_valid(): form.save() ... context = {'form': form} return render(request, '...html', context)