![](/img/trans.png)
[英]How to sum all integer properties from ForeignKey objects in django template?
[英]Filter All Objects That Belongs To a User From ForeignKey
我有兩個模型
class MyClients(models.Model):
user=models.ForeignKey(User)
client_name=models.CharField(max_length=100)
client_address=models.CharField(max_length=100,null=True, blank=True)
class MyIvoice(models.Model):
user=models.ForeignKey(User)
my_client=models.ForeignKey(MyClients)
在表單中,將顯示外鍵(MyClients)中的所有對象,但我只想過濾用戶列出的客戶端名稱,而不是Myclient模型中的所有客戶端。 如何在模型中執行此操作?
我了解我可以在視圖中執行此操作,但是可以在模型中執行此操作嗎? 由於我希望用戶在表單中選擇一個客戶端。
在模型上執行此操作是不正確的,您要在表單上執行操作。
如果您已經知道表單的用戶實例,則可以在類級別使用queryset
kwarg進行操作(在定義字段時):
client = forms.ModelChoiceField(queryset=MyClients.objects.filter(user=my_user))
但是,如果您僅在創建時有權訪問用戶實例,則仍然可以稍后覆蓋查詢集(通常在__init__
):
self.fields['client'].queryset = MyClients.objects.filter(user=my_user)
在表單部分中添加一個init函數:
class MyForm(forms.Form, FormMixin):
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
self.user = user
super(MyForm, self).__init__(*args, **kwargs)
# do stuff
self.fields['myclient'].queryset = user.myclient_set.all()
然后在視圖部分中將user=request.user
作為形式arg添加。
def my_view(request, id=None):
# do stuff to get your instance
form = MyForm(request.POST or None, instance=instance, user=request.user)
您可以使用相關名稱:
# Gets all MyClient objects for a user
user.myclient_set.all()
我不確定您為什么要在模型上執行此操作,這種邏輯的位置就是表格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.