Django:限制模型中的选择.PrimaryKey的Charfield



今晚我的另一个问题,我希望我能充分解释:

我的"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是正确的做法吗?

感谢大家,祝大家晚安!

好吧,不知道这是否是正确的方法,但我找到了解决问题的方法:

  1. 为我的视图函数编写了一个"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)
    
  2. 将我的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)
    

最新更新