Bu iki model verildiğinde, URL'm (ClientKeyword içinde) yalnızca istemciyi geçerli ClientKeyword istemcisine eşit olan URL'leri göstermesini istiyorum.Django: ForeignKey limit_choices_to geçerli nesnenin istemcisine eşit
Ne yazmalıyım limit_choices_to?
Artık o şuna benzer:
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})
Ben göçler yapabileceğini ve django şikayeti yoktu, ama ben eklemeye çalıştığınızda yeni bir anahtar kelime aşağıdaki Traceback olsun yönetici arayüzü oluşturur:
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'
Bu (aslında benim) eski bir yazı olduğunu ama doğru yönde gidiyor alacak düşünüyorum: https://groups.google.com/forum/?fromgroups=#!topic/django- Kullanıcılar/s9a0J6fKgWs – Brandon
teşekkürler, ama modellerinde limit_choices_to seçeneğini kullanarak bitirdiniz mi yoksa sadece özel bir form yazarak mı çözdünüz? Ayrıca, seçtiğim müşteriye bağlı olarak url listesini güncellemenin mümkün olup olmadığını biliyor musunuz? (düzenleme yerine eklerken yaptığım için) –
Filtreleme mantığını yönetici olarak kullandığım özel bir formda koydum. Örnekte bir "id" varlığına dayalı olarak güncellemeye karşı ekleme için seçici filtre yapabilmeniz gerekir. – Brandon