#django #django-class-based-views
#django #django-представления на основе классов
Вопрос:
class ModTool(models.Model):
...
issue = models.OneToOneField(Issue)
priority = models.CharField(max_length=1, choices=PRIORITY, blank=True)
status = models.CharField(max_length=1, choices=STATUS, default='O', blank=True)
url
url(r'^moderate/(?P<pk>d )', ModEdit.as_view(),name='moderation')
Вид
class Modedit(UpdateView):
model = ModTool
template_name = 'myapp/moderate.html'
fields = ['priority','status']
На данный момент я не могу понять, как настроить это представление для редактирования конкретного экземпляра ModTool, который имеет onetoonefield с проблемой, указанной в pk.
Ответ №1:
slug_field
Для этого вы можете использовать атрибуты slug_url_kwarg
and:
url(r'^moderate/(?P<issue_id>d )', ModEdit.as_view(),name='moderation')
class Modedit(UpdateView):
slug_field = 'issue_id'
slug_url_kwarg = 'issue_id'
model = ModTool
template_name = 'myapp/moderate.html'
fields = ['priority','status']
Это позволит выполнить поиск по issue_id=<issue_id>
тому, где issue_id
находится первичный ключ проблемы, как указано в URL.
Я переименовал аргумент ключевого pk
issue_id
слова в, чтобы предотвратить столкновение имени с поиском первичного ключа. В противном случае будет выполняться дополнительный фильтр, который фильтрует по ModTool
первичному ключу со значением для Issue
первичного ключа.
Комментарии:
1. Спасибо. как вы это поняли? Документы являются наиболее запутанными, когда дело доходит до CBV. Кстати, если я позже добавлю поле slug в свою модель проблем, будет ли оно по-прежнему работать? Извините, но CBV очень сбивают меня с толку.
2. @yayu Если вы позже добавите поле slug, вы сможете выполнить поиск по отношениям, как вы привыкли, т.Е.
slug_field = 'issue__slug_field'
. Мои знания о CBV в основном основаны на опыте и чтении исходного кода, но недавно я нашел на сайте классные представления на основе классов , что является очень полезным ресурсомэто собирает весь исходный код и встроенную документацию для определенного класса на одной странице.