Django Форма - фильтрация списка по значению внешнего ключа - PullRequest
0 голосов
/ 25 апреля 2020

Таким образом, в основном у меня есть следующее в файле models.py

class Company (models.Model):
    title = models.CharField(max_length=100)
    short = models.CharField(max_length=50,default='NA') 

class AccountingGroups(models.Model):
    title = models.CharField(max_length=50, unique=True)
    description= models.CharField(max_length=150,blank=True)
    section = models.ForeignKey(Section, on_delete=models.PROTECT)

class Transaction (models.Model):
    description = models.CharField(max_length=100)
    date_created= models.DateField(auto_now_add=True)
    posting_date = models.DateField()
    user=models.ForeignKey(User, on_delete=models.PROTECT)
    company = models.ForeignKey(Company, on_delete=models.PROTECT)
    account_group = models.ForeignKey(AccountingGroups, on_delete=models.PROTECT)
    income_amt = models.DecimalField(max_digits=6, decimal_places=2,default=0)
    expenditure_amt = models.DecimalField(max_digits=6, decimal_places=2,default=0)

Теперь я отображаю форму транзакции в браузере, чтобы регистрировать все доходы и расходы конкретной компании. Ниже приведен файл forms.py.

class TransactionForm(ModelForm):
    #posting_date = DateField(input_formats=['%d/%m/%Y'])
    posting_date = DateField(widget=DatePickerInput(format='%d/%m/%Y').start_of('event active days'),
                               input_formats=('%d/%m/%Y',),
                               required=False)
    class Meta:
        model = Transaction
        fields = ['description','posting_date','account_group','income_amt','expenditure_amt']

Теперь структура веб-сайта такова, что у каждой компании, которая есть в моей базе данных, есть отдельный URL. Когда я go для каждого URL, я могу просмотреть / изменить или создать новую / существующую транзакцию для этой конкретной компании. Теперь то, что я спрашиваю, могу ли я ограничить форму так, чтобы она отображала только учетные группы только для этой конкретной компании, а не отображала все учетные группы независимо от того, в какой компании я пытаюсь создать транзакцию.

1 Ответ

1 голос
/ 25 апреля 2020

Если вы хотите отобразить учетные группы компании (а не транзакции), вам нужен внешний ключ для фильтрации. В настоящее время в вашей таблице AccountingGroups нет данных, если только ваш Раздел FK не связан с Компанией. Затем вы просто запрашиваете эту связь по внешнему ключу.

AccountingGroups.objects.filter(section__company_id=pk)

Независимо от того, как вы это делаете, вам нужно будет передать company_id через ваш запрос.

...