इन दो मॉडलों को देखते हुए को ForeignKey limit_choices_to, मैं अपने यूआरएल FK (ClientKeyword में) केवल करने के लिए यूआरएल जिसका ग्राहक वर्तमान ClientKeyword के ग्राहक के बराबर होती है दिखाने चाहते हैं।Django: बराबर वर्तमान वस्तु के ग्राहक
मैं limit_choices_to में क्या रखना चाहिए?
अभी यह इस तरह दिखता है:
class ClientUrl(models.Model):
client = models.ForeignKey(UpstreamClientModel)
url = models.URLField(unique=True, null=False)
active = models.BooleanField(default=True)
def __unicode__(self):
return self.url
class Meta:
verbose_name = 'url'
KEYWORD_TYPES = (
('MN', 'Money'),
('BR', 'Brand'),
('LT', 'Long Tail'),
)
class ClientKeyword(models.Model):
client = models.ForeignKey(UpstreamClientModel)
kw_type = models.CharField("keyword type", max_length=2,
choices=KEYWORD_TYPES, default='LT')
keyword = models.CharField(max_length=150, unique=True)
# TODO: keyword parent ManyToManyField("self")
url = models.ForeignKey(ClientUrl, limit_choices_to={'client': client})
मैं माइग्रेशन कर सकता है और Django शिकायत नहीं किया था, लेकिन एक नया कीवर्ड व्यवस्थापक इंटरफ़ेस मैं निम्नलिखित ट्रैसबैक पाने के लिए फार्म जब मैं जोड़ने की कोशिश:
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/contrib/admin/options.py" in wrapper
366. return self.admin_site.admin_view(view)(*args, **kwargs)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
91. response = view_func(request, *args, **kwargs)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
89. response = view_func(request, *args, **kwargs)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner
196. return view(request, *args, **kwargs)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper
25. return bound_func(*args, **kwargs)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
91. response = view_func(request, *args, **kwargs)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/utils/decorators.py" in bound_func
21. return func(self, *args2, **kwargs2)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/db/transaction.py" in inner
209. return func(*args, **kwargs)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/contrib/admin/options.py" in add_view
932. ModelForm = self.get_form(request)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/contrib/admin/options.py" in get_form
459. return modelform_factory(self.model, **defaults)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/forms/models.py" in modelform_factory
407. return form_metaclass(class_name, (form,), form_class_attrs)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/forms/models.py" in __new__
206. opts.exclude, opts.widgets, formfield_callback)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/forms/models.py" in fields_for_model
164. formfield = formfield_callback(f, **kwargs)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/contrib/admin/options.py" in formfield_for_dbfield
107. formfield = self.formfield_for_foreignkey(db_field, request, **kwargs)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/contrib/admin/options.py" in formfield_for_foreignkey
168. return db_field.formfield(**kwargs)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/db/models/fields/related.py" in formfield
1005. 'queryset': self.rel.to._default_manager.using(db).complex_filter(self.rel.limit_choices_to),
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/db/models/query.py" in complex_filter
660. return self._filter_or_exclude(None, **filter_obj)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/db/models/query.py" in _filter_or_exclude
642. clone.query.add_q(Q(*args, **kwargs))
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/db/models/sql/query.py" in add_q
1250. can_reuse=used_aliases, force_having=force_having)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/db/models/sql/query.py" in add_filter
1185. connector)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/db/models/sql/where.py" in add
69. value = obj.prepare(lookup_type, value)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/db/models/sql/where.py" in prepare
320. return self.field.get_prep_lookup(lookup_type, value)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/db/models/fields/related.py" in get_prep_lookup
137. return self._pk_trace(value, 'get_prep_lookup', lookup_type)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/db/models/fields/related.py" in _pk_trace
210. v = getattr(field, prep_func)(lookup_type, v, **kwargs)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/db/models/fields/__init__.py" in get_prep_lookup
310. return self.get_prep_value(value)
File "/Users/mirkocrocop/.virtualenvs/upstream_backend/lib/python2.7/site-packages/django/db/models/fields/__init__.py" in get_prep_value
537. return int(value)
Exception Type: TypeError at /admin/clients/clientkeyword/add/
Exception Value: int() argument must be a string or a number, not 'ForeignKey'
यह एक पुराना पोस्ट (मेरा वास्तव में की) है, लेकिन मुझे लगता है कि आप सही दिशा में जा रहा हो जाएगी: https://groups.google.com/forum/?fromgroups=#!topic/django- उपयोगकर्ताओं/s9a0J6fKgWs – Brandon
धन्यवाद, लेकिन आप अपने मॉडल में limit_choices_to विकल्प का उपयोग कर खत्म किया था या तुम सिर्फ एक कस्टम फ़ॉर्म लिख कर इसे हल किया? साथ ही, ... क्या आप जानते हैं कि क्लाइंट के आधार पर यूआरएल की सूची अपडेट करना संभव होगा? –
(जब मैं संपादन के बजाय जोड़ रहा के लिए) मुझे लगता है कि मैं व्यवस्थापक में इस्तेमाल एक कस्टम रूप में छानने तर्क डाल दिया। उदाहरण के लिए आपको 'आईडी' की उपस्थिति के आधार पर अद्यतन बनाम अद्यतन के लिए चुनिंदा फ़िल्टर करने में सक्षम होना चाहिए। – Brandon