Django modelforms, фильтр посторонних ключей для данных, принадлежащих зарегистрированному пользователю [duplicate]

Объявление переменной как изменчивого означает, что изменение ее значения немедленно влияет на фактическое хранилище памяти для переменной. Компилятор не может оптимизировать любые ссылки на переменную. Это гарантирует, что, когда один поток изменяет переменную, все остальные потоки сразу видят новое значение. (Это не гарантируется для энергонезависимых переменных.)

Объявление атомной переменной гарантирует, что операции, выполненные над переменной, происходят атомарно, т. Е. Все подэтапы операции завершаются в пределах они выполняются и не прерываются другими потоками. Например, операция приращения и тестирования требует, чтобы переменная была увеличена, а затем сравнена с другим значением; атомная операция гарантирует, что оба этих этапа будут выполнены, как если бы они были единой неделимой / бесперебойной операцией.

Синхронизация всех обращений к переменной позволяет только одному потоку одновременно обращаться к переменной и заставляет все остальные потоки ждать, пока этот поток доступа освободит свой доступ к переменной.

Синхронизированный доступ похож на атомный доступ, но атомные операции обычно реализуются на более низком уровне программирования. Кроме того, вполне возможно синхронизировать только некоторые обращения к переменной и разрешить другим доступам быть несинхронизированными (например, синхронизировать все записи с переменной, но ни одно из них не читается).

Атомность, синхронизация, и волатильность являются независимыми атрибутами, но обычно используются в комбинации для обеспечения надлежащего взаимодействия потоков для доступа к переменным.

Добавление (апрель 2016)

Синхронизированный доступ к переменная обычно реализуется с использованием монитора или семафора . Это низкоуровневые механизмы mutex (взаимное исключение), которые позволяют потоку получать контроль над переменной или блоком кода исключительно, заставляя все остальные потоки ждать, если они также попытаются получить один и тот же мьютекс. [7] (июль 2016)

Синхронизация происходит на после того, как собственная нить освободит мьютекс, другой поток может получить мьютекс по очереди.

объект . Это означает, что вызов синхронизированного метода класса блокирует объект this вызова. Статические синхронизированные методы блокируют сам объект Class.

Аналогично, для входа в синхронизированный блок требуется блокировка объекта this метода.

Это означает, что синхронизированный метод ( или блок) могут выполняться в нескольких потоках одновременно, если они блокируют разные объекты , но только один поток может выполнять синхронизированный метод (или блок) за раз для любого данного одиночный объект.

0
задан finspin 7 November 2012 в 23:37
поделиться

2 ответа

Это происходит потому, что ModelForm не принимает ключевое слово queryset.

Возможно, вы можете достичь этого, установив запрос на представление:

form = IngredienceForm()
form.fields["category"].queryset = 
        IngredienceCategory.objects.filter(user=request.user)

См. соответствующий вопрос здесь .

1
ответ дан Community 26 August 2018 в 15:20
поделиться

Здесь у меня есть другое предложение решить проблему. Вы можете передать объект запроса в свой объект формы внутри.

В view.py просто передайте объект запроса.

form = IngredienceForm(request)

В вашей функции forms.py __init__ также добавьте request object

from models import  IngredienceCategory as IC

class IngredienceForm(ModelForm):
    class Meta:
        model = Ingredience
        fields = ('name', 'category')

    def __init__(self, request, *args, **kwargs):
        super(IngredienceForm, self).__init__(*args, **kwargs)
        self.fields['name'].queryset = IC.objects.filter(user=request.user)

Этот фильтр всегда будет применяться всякий раз, когда вы инициализируете свою форму.

0
ответ дан Harun ERGUL 26 August 2018 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: