models.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. from django.db import models
  2. from zlogin.models import User,UserGroup
  3. class CrossDbForeignKey(models.ForeignKey):
  4. def validate(self, value, model_instance):
  5. if self.rel.parent_link:
  6. return
  7. super(models.ForeignKey, self).validate(value, model_instance)
  8. if value is None:
  9. return
  10. # Here is the trick, get db relating to fk, not to root model
  11. using = router.db_for_read(self.rel.to, instance=model_instance)
  12. qs = self.rel.to._default_manager.using(using).filter(
  13. **{self.rel.field_name: value}
  14. )
  15. qs = qs.complex_filter(self.rel.limit_choices_to)
  16. if not qs.exists():
  17. raise exceptions.ValidationError(self.error_messages['invalid'] % {
  18. 'model': self.rel.to._meta.verbose_name, 'pk': value})
  19. class CrossDbManyToManyField(models.ManyToManyField):
  20. def validate(self, value, model_instance):
  21. if self.rel.parent_link:
  22. return
  23. super(models.ManyToManyField, self).validate(value, model_instance)
  24. if value is None:
  25. return
  26. # Here is the trick, get db relating to fk, not to root model
  27. using = router.db_for_read(self.rel.to, instance=model_instance)
  28. qs = self.rel.to._default_manager.using(using).filter(
  29. **{self.rel.field_name: value}
  30. )
  31. qs = qs.complex_filter(self.rel.limit_choices_to)
  32. if not qs.exists():
  33. raise exceptions.ValidationError(self.error_messages['invalid'] % {
  34. 'model': self.rel.to._meta.verbose_name, 'pk': value})
  35. class KVConf(models.Model):
  36. key = models.CharField(max_length=64,unique=True,db_index=True)
  37. value = models.TextField()
  38. class BlogCategoty(models.Model):
  39. engname = models.CharField(unique=True,max_length=64,db_index=True)
  40. title = models.CharField(max_length=64)
  41. order = models.IntegerField()
  42. topli = models.CharField(max_length=64,blank=True,null=True)
  43. def __unicode__(self):
  44. return self.title
  45. def __repr__(self):
  46. return self.engname
  47. # Create your models here.
  48. class BlogPost(models.Model):
  49. class Meta:
  50. ordering = ["-pubtime"]
  51. title = models.CharField(max_length=128)
  52. category = models.ManyToManyField(BlogCategoty,null=True)
  53. author = models.ForeignKey(User,related_name="pichublog_post_set")
  54. crttime = models.DateTimeField(auto_now_add=True)
  55. pubtime = models.DateTimeField(auto_now_add=True,auto_now=True)
  56. markdown = models.TextField()
  57. rendered = models.BooleanField(default=False)
  58. html = models.TextField()
  59. hidden = models.BooleanField(default=True)
  60. private = models.BooleanField(default=False)
  61. passwdlck = models.BooleanField(default=False)
  62. passwd = models.CharField(max_length=128)
  63. readgrp = models.ManyToManyField('zlogin.UserGroup',blank=True,null=True,related_name="pichublog_readgrp")
  64. readuin = models.ManyToManyField('zlogin.User',blank=True,null=True,related_name="pichublog_readuin")
  65. readuex = models.ManyToManyField('zlogin.User',blank=True,null=True,related_name="pichublog_readuex")
  66. freecomment = models.BooleanField(default=True)
  67. commentgrp = models.ManyToManyField('zlogin.UserGroup',blank=True,null=True,related_name="pichublog_commentgrp")
  68. commentuin = models.ManyToManyField('zlogin.User',blank=True,null=True,related_name="pichublog_commentuin")
  69. commentuex = models.ManyToManyField('zlogin.User',blank=True,null=True,related_name="pichublog_commentuex")
  70. class BlogComment(models.Model):
  71. cmid = models.BigIntegerField(primary_key=True)
  72. reviewed = models.BooleanField(default=False)
  73. post = models.ForeignKey(BlogPost)
  74. time = models.DateTimeField(auto_now_add=True,auto_now=True)
  75. anonymou = models.BooleanField(default=True)
  76. stoken = models.CharField(max_length=36,db_index=True)
  77. mail = models.CharField(max_length=255,blank=True,null=True)
  78. website = models.CharField(max_length=255,blank=True,null=True)
  79. fromuser = models.CharField(max_length=64)
  80. content = models.TextField()
  81. class LeaveMsg(models.Model):
  82. cmid = models.BigIntegerField(primary_key=True)
  83. reviewed = models.BooleanField(default=False)
  84. title = models.CharField(max_length=255)
  85. time = models.DateTimeField(auto_now_add=True,auto_now=True)
  86. anonymou = models.BooleanField(default=True)
  87. stoken = models.CharField(max_length=36,db_index=True)
  88. mail = models.CharField(max_length=255,blank=True,null=True)
  89. website = models.CharField(max_length=255,blank=True,null=True)
  90. fromuser = models.CharField(max_length=64)
  91. content = models.TextField()