Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Parent(models.Model):
- name = models.CharField(max_length=255)
- favoritechild = models.ForeignKey("Child", blank=True, null=True)
- class Child(models.Model):
- name = models.CharField(max_length=255)
- myparent = models.ForeignKey(Parent)
- class Parent(models.Model):
- name = models.CharField(max_length=255)
- favoritechild = models.ForeignKey("Child", blank=True, null=True, limit_choices_to = {"myparent": "self"})
- @classmethod
- def _product_list(cls):
- """
- return a list containing the one product_id contained in the request URL,
- or a query containing all valid product_ids if not id present in URL
- used to limit the choice of foreign key object to those related to the current product
- """
- id = threadlocals.get_current_product()
- if id is not None:
- return [id]
- else:
- return Product.objects.all().values('pk').query
- product = models.ForeignKey(
- Product,
- limit_choices_to={
- id__in=BaseModel._product_list,
- },
- )
- from django import forms
- from django.contrib import admin
- from models import *
- class SupplierAdminForm(forms.ModelForm):
- class Meta:
- model = Supplier
- def __init__(self, *args, **kwargs):
- super(SupplierAdminForm, self).__init__(*args, **kwargs)
- if self.instance:
- self.fields['cat'].queryset = Cat.objects.filter(supplier=self.instance)
- class SupplierAdmin(admin.ModelAdmin):
- form = SupplierAdminForm
- class Parent(models.Model):
- name = models.CharField(max_length=255)
- class Child(models.Model):
- name = models.CharField(max_length=255)
- myparent = models.ForeignKey(Parent)
- class MyModelAdmin(admin.ModelAdmin):
- def formfield_for_foreignkey(self, db_field, request, **kwargs):
- if db_field.name == "favoritechild":
- kwargs["queryset"] = Child.objects.filter(myparent=request.object_id)
- return super(MyModelAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)
- class Parent(models.Model):
- name = models.CharField(max_length=255)
- favoritechild = models.ForeignKey("Child", blank=True, null=True)
- def save(self, force_insert=False, force_update=False):
- if self.favoritechild is not None and self.favoritechild.myparent.id != self.id:
- raise Exception("You must select one of your own children as your favorite")
- super(Parent, self).save(force_insert, force_update)
- class ParentAdmin(admin.ModelAdmin):
- def get_form(self, request, obj=None, **kwargs):
- self.instance = obj
- return super(ParentAdmin, self).get_form(request, obj=obj, **kwargs)
- def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
- if db_field.name == 'favoritechild' and self.instance:
- kwargs['queryset'] = Child.objects.filter(myparent=self.instance.pk)
- return super(ChildAdmin, self).formfield_for_foreignkey(db_field, request=request, **kwargs)
- class MyModel(models.Model):
- def _get_self_pk(self):
- return self.pk
- favourite = models.ForeignKey(limit_choices_to={'myparent__pk':_get_self_pk})
- from django.contrib import admin
- from sopin.menus.models import Restaurant, DishType
- class ObjInline(admin.TabularInline):
- def __init__(self, parent_model, admin_site, obj=None):
- self.obj = obj
- super(ObjInline, self).__init__(parent_model, admin_site)
- class ObjAdmin(admin.ModelAdmin):
- def get_inline_instances(self, request, obj=None):
- inline_instances = []
- for inline_class in self.inlines:
- inline = inline_class(self.model, self.admin_site, obj)
- if request:
- if not (inline.has_add_permission(request) or
- inline.has_change_permission(request, obj) or
- inline.has_delete_permission(request, obj)):
- continue
- if not inline.has_add_permission(request):
- inline.max_num = 0
- inline_instances.append(inline)
- return inline_instances
- class DishTypeInline(ObjInline):
- model = DishType
- def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
- field = super(DishTypeInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
- if db_field.name == 'dishtype':
- if self.obj is not None:
- field.queryset = field.queryset.filter(restaurant__exact = self.obj)
- else:
- field.queryset = field.queryset.none()
- return field
- class RestaurantAdmin(ObjAdmin):
- inlines = [
- DishTypeInline
- ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement