Advertisement
Guest User

Untitled

a guest
Aug 18th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.49 KB | None | 0 0
  1. class Parent(models.Model):
  2. name = models.CharField(max_length=255)
  3. favoritechild = models.ForeignKey("Child", blank=True, null=True)
  4.  
  5. class Child(models.Model):
  6. name = models.CharField(max_length=255)
  7. myparent = models.ForeignKey(Parent)
  8.  
  9. class Parent(models.Model):
  10. name = models.CharField(max_length=255)
  11. favoritechild = models.ForeignKey("Child", blank=True, null=True, limit_choices_to = {"myparent": "self"})
  12.  
  13. @classmethod
  14. def _product_list(cls):
  15. """
  16. return a list containing the one product_id contained in the request URL,
  17. or a query containing all valid product_ids if not id present in URL
  18.  
  19. used to limit the choice of foreign key object to those related to the current product
  20. """
  21. id = threadlocals.get_current_product()
  22. if id is not None:
  23. return [id]
  24. else:
  25. return Product.objects.all().values('pk').query
  26.  
  27. product = models.ForeignKey(
  28. Product,
  29. limit_choices_to={
  30. id__in=BaseModel._product_list,
  31. },
  32. )
  33.  
  34. from django import forms
  35. from django.contrib import admin
  36. from models import *
  37.  
  38. class SupplierAdminForm(forms.ModelForm):
  39. class Meta:
  40. model = Supplier
  41.  
  42. def __init__(self, *args, **kwargs):
  43. super(SupplierAdminForm, self).__init__(*args, **kwargs)
  44. if self.instance:
  45. self.fields['cat'].queryset = Cat.objects.filter(supplier=self.instance)
  46.  
  47. class SupplierAdmin(admin.ModelAdmin):
  48. form = SupplierAdminForm
  49.  
  50. class Parent(models.Model):
  51. name = models.CharField(max_length=255)
  52.  
  53. class Child(models.Model):
  54. name = models.CharField(max_length=255)
  55. myparent = models.ForeignKey(Parent)
  56.  
  57. class MyModelAdmin(admin.ModelAdmin):
  58. def formfield_for_foreignkey(self, db_field, request, **kwargs):
  59. if db_field.name == "favoritechild":
  60. kwargs["queryset"] = Child.objects.filter(myparent=request.object_id)
  61. return super(MyModelAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)
  62.  
  63. class Parent(models.Model):
  64. name = models.CharField(max_length=255)
  65. favoritechild = models.ForeignKey("Child", blank=True, null=True)
  66. def save(self, force_insert=False, force_update=False):
  67. if self.favoritechild is not None and self.favoritechild.myparent.id != self.id:
  68. raise Exception("You must select one of your own children as your favorite")
  69. super(Parent, self).save(force_insert, force_update)
  70.  
  71. class ParentAdmin(admin.ModelAdmin):
  72. def get_form(self, request, obj=None, **kwargs):
  73. self.instance = obj
  74. return super(ParentAdmin, self).get_form(request, obj=obj, **kwargs)
  75.  
  76. def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
  77. if db_field.name == 'favoritechild' and self.instance:
  78. kwargs['queryset'] = Child.objects.filter(myparent=self.instance.pk)
  79. return super(ChildAdmin, self).formfield_for_foreignkey(db_field, request=request, **kwargs)
  80.  
  81. class MyModel(models.Model):
  82. def _get_self_pk(self):
  83. return self.pk
  84. favourite = models.ForeignKey(limit_choices_to={'myparent__pk':_get_self_pk})
  85.  
  86. from django.contrib import admin
  87. from sopin.menus.models import Restaurant, DishType
  88.  
  89. class ObjInline(admin.TabularInline):
  90. def __init__(self, parent_model, admin_site, obj=None):
  91. self.obj = obj
  92. super(ObjInline, self).__init__(parent_model, admin_site)
  93.  
  94. class ObjAdmin(admin.ModelAdmin):
  95.  
  96. def get_inline_instances(self, request, obj=None):
  97. inline_instances = []
  98. for inline_class in self.inlines:
  99. inline = inline_class(self.model, self.admin_site, obj)
  100. if request:
  101. if not (inline.has_add_permission(request) or
  102. inline.has_change_permission(request, obj) or
  103. inline.has_delete_permission(request, obj)):
  104. continue
  105. if not inline.has_add_permission(request):
  106. inline.max_num = 0
  107. inline_instances.append(inline)
  108.  
  109. return inline_instances
  110.  
  111.  
  112.  
  113. class DishTypeInline(ObjInline):
  114. model = DishType
  115.  
  116. def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
  117. field = super(DishTypeInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
  118. if db_field.name == 'dishtype':
  119. if self.obj is not None:
  120. field.queryset = field.queryset.filter(restaurant__exact = self.obj)
  121. else:
  122. field.queryset = field.queryset.none()
  123.  
  124. return field
  125.  
  126. class RestaurantAdmin(ObjAdmin):
  127. inlines = [
  128. DishTypeInline
  129. ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement