class Task(models.Model):
location = models.ForeignKey(Locations, related_name='Task_location')
buyer = models.ForeignKey(UserProfile, related_name='Task_buyer')
class Locations(models.Model):
user = models.ForeignKey('registration.UserProfile', \
verbose_name=_('user'), related_name="user_locations")
class UserProfile(User):
class TaskForm(ModelForm):
class Meta:
model = Task
fields = ('location', 'name', 'description')
Тобто, в таск привязаний до юзера і юзерського локейшена. Форма мені виводить всі локейшени всіх юзерів, що не є добре. Хочу щоб виводились лише рідні локейшени юзера.
Рішення просте. Перевизначити init TaskForm'и і змінити queryset поля location
У вюшці в конструктор TaskForm передаємо request.user, бо нам треба буде фільтрувати по ньому Locations
views.py
@login_required
@render_to('')
def task_add(request, template="tasks/add.html"):
if request.method == 'POST':
form = TaskForm(request.POST, user=request.user)
if form.is_valid():
task = form.save(request.user, 1)
TaskStatus.objects.create(task=task, task_status=1)
return redirect("home")
else:
form = TaskForm(user=request.user)
return {'form': form,}, template
forms.py
class TaskForm(ModelForm):
class Meta:
model = Task
fields = ('category', 'location', 'name', 'description', 'price')
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
super(TaskForm, self).__init__(*args, **kwargs)
self.fields['location'].queryset=Locations.objects.filter(user=self.user)
def save(self, user=None, task_status=None, commit=True):
task_object = super(TaskForm, self).save(commit=False)
task_object.buyer = user
task_object.task_status = task_status
if commit:
task_object.save()
return task_object
Немає коментарів:
Дописати коментар