11e3a9652a first лет %!s(int64=7): %!d(string=назад) _to-object.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) _to-primitive.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) _typed-array.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) _typed-buffer.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) _typed.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) _uid.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) _user-agent.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) _validate-collection.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) _wks-define.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) _wks-ext.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) _wks.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) core.delay.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) core.dict.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) core.function.part.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) core.get-iterator-method.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) core.get-iterator.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) core.is-iterable.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) core.number.iterator.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) core.object.classof.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) core.object.define.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) core.object.is-object.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) core.object.make.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) core.regexp.escape.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) core.string.escape-html.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) core.string.unescape-html.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es5.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.copy-within.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.every.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.fill.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.filter.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.find-index.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.find.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.for-each.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.from.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.index-of.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.is-array.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.iterator.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.join.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.last-index-of.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.map.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.of.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.reduce-right.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.reduce.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.slice.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.some.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.sort.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.array.species.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.date.now.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.date.to-iso-string.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.date.to-json.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.date.to-primitive.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.date.to-string.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.function.bind.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.function.has-instance.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.function.name.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.map.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.acosh.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.asinh.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.atanh.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.cbrt.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.clz32.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.cosh.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.expm1.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.fround.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.hypot.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.imul.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.log10.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.log1p.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.log2.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.sign.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.sinh.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.tanh.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.math.trunc.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.number.constructor.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.number.epsilon.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.number.is-finite.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.number.is-integer.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.number.is-nan.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.number.is-safe-integer.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.number.max-safe-integer.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.number.min-safe-integer.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.number.parse-float.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.number.parse-int.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.number.to-fixed.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.number.to-precision.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.assign.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.create.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.define-properties.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.define-property.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.freeze.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.get-own-property-descriptor.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.get-own-property-names.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.get-prototype-of.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.is-extensible.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.is-frozen.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.is-sealed.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.is.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.keys.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.prevent-extensions.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.seal.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.set-prototype-of.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.object.to-string.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.parse-float.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.parse-int.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.promise.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.reflect.apply.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.reflect.construct.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.reflect.define-property.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.reflect.delete-property.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.reflect.enumerate.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.reflect.get-own-property-descriptor.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.reflect.get-prototype-of.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.reflect.get.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.reflect.has.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.reflect.is-extensible.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.reflect.own-keys.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.reflect.prevent-extensions.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.reflect.set-prototype-of.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.reflect.set.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.regexp.constructor.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.regexp.flags.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.regexp.match.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.regexp.replace.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.regexp.search.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.regexp.split.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.regexp.to-string.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.set.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.anchor.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.big.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.blink.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.bold.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.code-point-at.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.ends-with.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.fixed.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.fontcolor.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.fontsize.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.from-code-point.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.includes.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.italics.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.iterator.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.link.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.raw.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.repeat.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.small.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.starts-with.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.strike.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.sub.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.sup.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.string.trim.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.symbol.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.typed.array-buffer.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.typed.data-view.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.typed.float32-array.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.typed.float64-array.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.typed.int16-array.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.typed.int32-array.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.typed.int8-array.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.typed.uint16-array.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.typed.uint32-array.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.typed.uint8-array.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.typed.uint8-clamped-array.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.weak-map.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es6.weak-set.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.array.flat-map.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.array.flatten.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.array.includes.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.asap.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.error.is-error.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.global.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.map.from.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.map.of.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.map.to-json.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.math.clamp.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.math.deg-per-rad.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.math.degrees.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.math.fscale.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.math.iaddh.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.math.imulh.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.math.isubh.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.math.rad-per-deg.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.math.radians.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.math.scale.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.math.signbit.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.math.umulh.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.object.define-getter.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.object.define-setter.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.object.entries.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.object.get-own-property-descriptors.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.object.lookup-getter.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.object.lookup-setter.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.object.values.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.observable.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.promise.finally.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.promise.try.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.reflect.define-metadata.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.reflect.delete-metadata.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.reflect.get-metadata-keys.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.reflect.get-metadata.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.reflect.get-own-metadata-keys.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.reflect.get-own-metadata.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.reflect.has-metadata.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.reflect.has-own-metadata.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.reflect.metadata.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.set.from.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.set.of.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.set.to-json.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.string.at.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.string.match-all.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.string.pad-end.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.string.pad-start.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.string.trim-left.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.string.trim-right.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.symbol.async-iterator.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.symbol.observable.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.system.global.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.weak-map.from.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.weak-map.of.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.weak-set.from.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) es7.weak-set.of.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) web.dom.iterable.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) web.immediate.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) web.timers.js 11e3a9652a first лет %!s(int64=7): %!d(string=назад) kodo - Gogs: Go Git Service

Sin Descripción

models.py 5.1KB

    # -*- coding: utf-8 -*- from django.conf import settings from django.db import models from django.utils.translation import ugettext_lazy as _ from django_models_ext import BaseModelMixin from TimeConvert import TimeConvert as tc from group.models import GroupPhotoInfo from kodo.basemodels import PaiaiSrcMixin class UserMessageInfo(BaseModelMixin): SYSTEM = 'system' COMMENT = 'comment' THUMBUP = 'thumbup' MESSAGE_TYPE = ( (SYSTEM, u'系统'), (COMMENT, u'评论'), (THUMBUP, u'点赞'), ) MESSAGE_TYPE_INFO = [ { 'msg_type': SYSTEM, 'msg_type_desc': u'系统', 'msg_avatar': settings.SYSTEM_MESSAGE_AVATAR }, { 'msg_type': COMMENT, 'msg_type_desc': u'评论', 'msg_avatar': settings.COMMENT_MESSAGE_AVATAR }, { 'msg_type': THUMBUP, 'msg_type_desc': u'点赞', 'msg_avatar': settings.THUMBUP_MESSAGE_AVATAR } ] from_uid = models.CharField(_(u'from_uid'), max_length=32, blank=True, null=True, help_text=u'发送消息用户唯一标识', db_index=True) from_nickname = models.CharField(_(u'from_nickname'), max_length=255, blank=True, null=True, help_text=u'发送消息用户昵称') from_avatar = models.CharField(_(u'from_avatar'), max_length=255, blank=True, null=True, help_text=u'发送消息用户头像') to_uid = models.CharField(_(u'to_uid'), max_length=32, blank=True, null=True, help_text=u'接收消息用户唯一标识', db_index=True) group_id = models.CharField(_(u'group_id'), max_length=32, blank=True, null=True, help_text=u'群组唯一标识', db_index=True) photo_id = models.CharField(_(u'photo_id'), max_length=32, blank=True, null=True, help_text=u'飞图唯一标识', db_index=True) # TODO: IntegerField? msg_type = models.CharField(_(u'msg_type'), max_length=8, default='system', help_text=u'消息类型', db_index=True) msg_title = models.CharField(_(u'msg_title'), max_length=255, blank=True, null=True, help_text=u'消息标题') msg_content = models.TextField(_(u'msg_content'), blank=True, null=True, help_text=u'消息内容') read = models.BooleanField(_(u'read'), default=False, help_text=u'消息是否已读') class Meta: verbose_name = _('usermessageinfo') verbose_name_plural = _('usermessageinfo') def __unicode__(self): return unicode(self.pk) def msg_info(self, user_id=None): try: group_photo = GroupPhotoInfo.objects.get(photo_id=self.photo_id) except GroupPhotoInfo.DoesNotExist: group_photo = {} return { 'pk': self.pk, 'from_uid': self.from_uid, 'from_nickname': self.from_nickname, 'from_avatar': self.from_avatar, 'group_id': self.group_id, 'photo_id': self.photo_id, 'group_photo_info': group_photo and group_photo.photo_info(user_id), 'msg_title': self.msg_title, 'msg_content': self.msg_content, 'read': self.read, 'created_at': tc.remove_microsecond(self.created_at), } class SystemMessageInfo(BaseModelMixin, PaiaiSrcMixin): title = models.CharField(_(u'title'), max_length=255, help_text=u'系统消息标题') content = models.TextField(_(u'content'), blank=True, null=True, help_text=u'系统消息内容') url = models.CharField(_(u'url'), max_length=255, blank=True, null=True, help_text=u'系统消息链接') class Meta: verbose_name = _('systemmessageinfo') verbose_name_plural = _('systemmessageinfo') def __unicode__(self): return unicode(self.pk) def msg_info(self, user_id=None): return { 'pk': self.pk, 'title': self.title, 'content': self.content, 'url': self.url, 'read': SystemMessageReadInfo.objects.filter(user_id=user_id, msg_id=self.pk, status=True).exists(), } class SystemMessageReadInfo(BaseModelMixin): user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) msg_id = models.CharField(_(u'msg_id'), max_length=32, blank=True, null=True, help_text=u'系统消息唯一标识', db_index=True) class Meta: verbose_name = _('systemmessagereadinfo') verbose_name_plural = _('systemmessagereadinfo') unique_together = ( ('user_id', 'msg_id'), ) def __unicode__(self): return unicode(self.pk) class SystemMessageDeleteInfo(BaseModelMixin): user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) msg_id = models.CharField(_(u'msg_id'), max_length=32, blank=True, null=True, help_text=u'系统消息唯一标识', db_index=True) class Meta: verbose_name = _('systemmessagedeleteinfo') verbose_name_plural = _('systemmessagedeleteinfo') unique_together = ( ('user_id', 'msg_id'), ) def __unicode__(self): return unicode(self.pk)