簡體   English   中英

Django:限制模型中的選擇。PrimaryKey 的字符域

[英]Django: Limit choices in a models.Charfield by PrimaryKey

今晚我的另一個問題,我希望我能充分解釋:

我的“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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM