Если Ваш немного странный код CSS будет работать над всеми браузерами в Windows, то он будет работать над Mac и Linux?

Прежде всего, независимо от вашего вопроса, поле m2m ваших ролей должно быть обновлено следующим образом:

roles = models.ManyToManyField(Role, related_name='users')

related_name - это то, как вы ссылаетесь на текущую модель (User) из модели, переданной в ManyToManyField (Role). С моим предложением вы бы написали Role.objects.first().users, а не Role.objects.first().roles.

Во-вторых, если это возможно, я бы рекомендовал передать роли для создания / обновления пользователя в виде списка первичных ключей. Даже если это означает создание второго свойства сериализатора, которое предназначено только для записи. Например:

class UserSerializer(serializers.ModelSerializer):
    roles = RoleSerializer(many=True, read_only=True)
    role_ids = serializers.PrimaryKeyRelatedField(
        queryset=Role.objects.all(),
        many=True, write_only=True)

    class Meta:
        model = User
        fields = ('url', 'username', 'password', 'email', 'roles', 'role_ids')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        password = validated_data.pop('password')
        # Allow the serializer to handle the creation. Don't do it yourself.
        instance = super().create(**validated_data)
        if password is not None:
            instance.set_password(password)
            instance.save()

        return instance

Когда ваш API выплевывает пользователей, он должен выглядеть следующим образом:

{
    'url': '...',
    'username': '...',
    'email': '...',
    'roles': [{'id': 1, 'name': 'client'}],
}

Когда вы POST к нему, вы должны использовать:

{
    'url': '...',
    'username': '...',
    'email': '...',
    'password': '...',
    'role_ids': [1, 2],
}

Кроме того, причина, по которой вы получили ошибку User does not have an attribute named roles., заключается в том, что вы не можете передать roles в конструктор User. User.roles необходимо установить после того, как у вас есть экземпляр. Вы должны были сделать:

user = User(**validated_data)
user.roles.set(roles) # If you need to re-write the entire list.

Несмотря на то, что у меня в голове, я не уверен, что это сработает. Возможно, вам придется сохранить его заранее. Вот почему я предлагаю вам использовать super().create вместо этого.

8
задан GEOCHET 1 June 2009 в 19:47
поделиться

7 ответов

это будет работать над Mac и Linux?

Не обязательно.

Рендеринг шрифта является самой большой проблемой с таким межплатформенным. Некоторые шрифты, которые доступны в Windows, не включены в других по умолчанию, и OSX имеет очень тяжелую представляющую шрифт модель (хотя Safari в Windows должен показать это - по крайней мере, это привыкло для).

Общие модели поля, дополнение, поля, и др. должны все быть стандартными.

10
ответ дан 5 December 2019 в 08:01
поделиться

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

Linux имеет убивание браузеров, и я серьезно сомневаюсь, что любой там тестирует всех их. так как Firefox работает в Linux, у Вас есть хороший процент крытого рынка Linux.

у Вас уже есть более чем 95% рынка браузеров, покрытого браузерами, которые Вы протестировали.

2
ответ дан 5 December 2019 в 08:01
поделиться

http://browsershots.org/

Это позволит Вам просматривать свой сайт в нескольких браузерах через несколько платформ (Включенный Linux). Однако могу я подчеркивать, что возможности Вас заставляющий Ваш веб-сайт посмотреть 100%, идентичных в каждом, фактически невозможны, и иногда необходимо согласиться на 99%.

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

7
ответ дан 5 December 2019 в 08:01
поделиться

OS X имеет много основанных на WebKit браузеров, т.е. Safari/Shiira/iCab/OmniWeb, а также Firefox/SeaMonkey/Camino и Opera. У меня нет статистики, но я предположил бы, что это покрывает по крайней мере 98% всех пользователей.

Результаты конкурса популярности Debian:

w3m            85.93%
iceweasel      60.35%
lynx           25.71%
konqueror      21.95%
links           9.23%
iceape-browser  6.69%
elinks          6.51%
links2          4.09%
dillo           2.70%
galeon          2.35%
epiphany        0.79%
w3m-el          0.75%
kazehakase      0.58%
midori          0.30%
arora           0.29%

(Это не отслеживает пользователей с не - [DFSG], свободный* программное обеспечение, таких как Mozilla Firefox и Opera.) Пользователи Linux являются очень разнообразной толпой; даже если Вы тестируете с Mozilla Firefox, Opera и Konqueror от KDE 4 в Windows, Вы даже не близко к покрытию большей части базы пользователей.

Однако при сужении фокуса к браузерам с поддержкой современного CSS Вы найдете, что существует только несколько базовых механизмов: Трайдент (IE), Геккон (Mozilla), WebKit (Apple), KHTML (KDE), и Престо (Opera). Взятие их индивидуально:

  • Трайдент: только используемый IE в Windows, Вы уже тестируете его.
  • Геккон: используемый браузером Комплекта Mozilla (Навигатор Mozilla, Навигатор SeaMonkey, Навигатор IceApe, Mozilla Firefox, IceCat, IceApe, Геккон Крещения, Galeon, Kazehakase-геккон). Шрифт, изображение и сменный рендеринг действительно варьируются дико от платформы до платформы.
  • WebKit: используемый Safari/Shiira/iCab/Omniweb, Google Chrome, Крещением-WebKit, Kazehakase-WebKit, Arora. Рендеринг должен быть абсолютно последовательным через все браузеры OS X, поскольку они пользуются обеспеченной системой библиотекой WebKit, но Safari и Google Chrome в Windows имеют совсем другие механизмы рисунка внизу, и в Linux существует и Gtk + и спокойные версии с другим поведением.
  • KHTML: WebKit был разветвлен от него, но его разработка продолжилась независимо, и таким образом, существует изрядное количество расхождения. Используемый, прежде всего, Konqueror. KDE 4's Konqueror был портирован к Windows и OS X, ведя себя очень похоже; однако, KDE 4's KHTML значительно совершенствовался по KDE 3's, все еще в общем использовании.
  • Престо, используемый в Opera 7 и выше. Последовательный через платформы.

Как упомянуто другим ответом, парсингом HTML и моделью фрагмента CSS для каждого механизма неизменно через платформы. Это - только "небольшой" материал как шрифты, изображения и плагины, которые будут действовать по-другому.

2
ответ дан 5 December 2019 в 08:01
поделиться

по моему опыту, FF3 на Mac и Win не представляет точно то же, но все еще достаточно близко не потрудиться проверять обоих.

0
ответ дан 5 December 2019 в 08:01
поделиться

Это будет, скорее всего, работать, хотя я видел экземпляры, где что-то работает в FF3 на Windows, все же не делает для FF3 на OS X.

0
ответ дан 5 December 2019 в 08:01
поделиться

Я согласен, рендеринг шрифтов будет зависеть от FF3 win / mac и вызвал некоторые проблемы с позиционированием для меня

0
ответ дан 5 December 2019 в 08:01
поделиться
Другие вопросы по тегам:

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