Django Queryset через модели?

[решено] Через неделю я могу ответить на этот долгожданный вопрос Как запустить Youtube в фоновом режиме с помощью Webview . Да, веб-просмотр требует, чтобы пользовательский интерфейс запускался, мы не можем запустить его в фоновом режиме, используя сервис, даже если вы все же найдете свой путь, у вас все равно будут проблемы.

Уловки заключаются в следующем:

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

    [1 125]
  2. Допустим, вы запросили разрешение и готовы начать MainActivity, на данный момент забудьте о setContentView(R.layout.activity_main);, вместо этого вам нужно добавить свой макет в WindowManager, используя windowManager.addView(yourLayout, yourWindowParams);

activity_main.xml

В моем макете моим родительским макетом был DrawerLayout

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent".....

Итак, мне пришлось определить мою переменную-член следующим образом [ 1141]

private static DrawerLayout windowMain;

MainActivity

 windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
 inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
 windowMain = (DrawerLayout) inflater.inflate(R.layout.activity_main, null);
  1. Теперь основная часть с помощью этого windowMain, вы должны позвонить

    [ 113]

например

windowMain.findViewById(R.id.btn);
windowMain.findViewById(R.id.webview);
  1. Вам также необходимо определить его WindowManager.LayoutParams. Инициализация параметров.

    WindowManager.LayoutParams=expandParams
    expandParams = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
            WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON|
                    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
            PixelFormat.TRANSLUCENT);
    expandParams.gravity = Gravity.START | Gravity.TOP;
    expandParams.x = 0;
    expandParams.y = 0;
    
  2. Наконец, вам нужно добавить windowMain и его параметры в windowManager с помощью

      windowManager.addView(windowMain, expandParams);
    

Все сделано для того, чтобы окно плавало вокруг и возьмите весь экран, а затем сделайте то, что вам нужно, например, загрузив URL в веб-просмотр, используя wv.loadURL(url). Это гарантирует, что мы загрузили наше веб-представление внутри окна и нам просто нужно обновить параметры нашего windowMain так, чтобы оно минимизировало его или даже полностью исчезло, установив w:0 и h:0 вместо MATCH_PARENT

У вас может быть btn_ghost, который обновляет окно, например:

windowManager.updateViewLayout(windowMain, ghostParams);
  1. Наконец, когда мы создали это созданное, мы можем вызвать moveTaskToBack(true); ] это остановит деятельность, переместит ее на задачу, потому что она нам не нужна. При завершении этого действия, которое было создано, но остановлено, мы должны удалить наши windowMain.

      windowManager.removeView(windowMain);
      finish()
    
8
задан Sergio Acosta 10 December 2008 в 20:33
поделиться

2 ответа

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

Вам нужны queryset или просто повторяемое? AFAIK, неоднородный qs's не возможен. Однако Вы могли легко возвратить список, цепочечный итератор (itertools) или генератор, чтобы сделать то, что Вы хотите. Это предполагает, что модели, ссылающиеся на пользователя, знаются заранее. При принятии значения по умолчанию related_name, к связанным атрибутам queryset можно было получить доступ от пользовательского экземпляра через название модели:

qs = getattr(user, '%s_set' % model_name.lower());

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

8
ответ дан 5 December 2019 в 15:27
поделиться

Ваши модели должны содержать поля отношений (ForeigKey и ManyToManyField) с related_name набором аргумента ключевого слова. Проверьте документацию здесь.

3
ответ дан 5 December 2019 в 15:27
поделиться
Другие вопросы по тегам:

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