django-annoying icon indicating copy to clipboard operation
django-annoying copied to clipboard

AutoOneToOne doesn't work

Open vorlif opened this issue 8 years ago • 14 comments

System

OS: Linux Python: 3.5.1 Django: 1.9.5 Annoying: 0.9.0

Example

From README.md.

from annoying.fields import AutoOneToOneField

class MyProfile(models.Model):
    user = AutoOneToOneField(User, primary_key=True)
    home_page = models.URLField(max_length=255, blank=True)
    icq = models.IntegerField(blank=True, null=True)

Description

I have try your example but it doesnt't work. I have no error messages. The field works lika a regular OneToOne field.

vorlif avatar Apr 07 '16 17:04 vorlif

It is not working for me either.

class Alpha(models.Model):
  ...

class Beta(models.Model):
   alpha = AutoOneToOneField(Alpha, primary_key=True, on_delete=models.CASCADE)

I created an Alpha object and no corresponding Beta object was created.

pymarco avatar May 22 '16 07:05 pymarco

Hmm, can anyone see what the problem is, or submit a PR to fix it?

skorokithakis avatar May 24 '16 12:05 skorokithakis

@pymarco I'm just seing this but AutoOneToOneField won't create a related object unless you try to access it.

a = Alpha.objects.create()
Beta.objects.count()
# 0
a.beta
# <Beta: Beta object>
Beta.objects.count()  # 1

arthurio avatar Aug 04 '16 00:08 arthurio

@arthurio thanks, its worked for me on Django 1.10, python 2.7

usunyu avatar Sep 01 '16 10:09 usunyu

It is not working for me either.

django 1.9.7 annoying: 0.9.0

littlehome-eugene avatar Mar 14 '17 08:03 littlehome-eugene

@littlehome-eugene We are going to need more details than that to figure out what is not working for you...

arthurio avatar Mar 29 '17 00:03 arthurio

Same here. Django 1.11.2, annoying 0.10.3.

Under some circumstances objects are being created, but what those are I haven't figured out yet.

moorchegue avatar Aug 10 '17 04:08 moorchegue

Not working for me either. Django 1.11.6, python 2.7, annoying 0.10.3.

eduardocesar avatar Oct 13 '17 15:10 eduardocesar

@eduardocesar @moorchegue I don't see how we can possibly help you without more details... Did you read my previous comment ?

arthurio avatar Oct 13 '17 16:10 arthurio

@arthurio I've tried to access the related object after the creation of the primary object and did not appear. With some investigation, it seems that it was a boolean field in the related object that was preventing it's creation.

eduardocesar avatar Oct 13 '17 17:10 eduardocesar

Doesn't work for me either:

class PatientRecord(models.Model):

	checkup_interval = models.IntegerField(default=180)

class Patient(models.Model):
        name = models.CharField(max_length=64)
	# date_of_birth = models.DateField()
	record = AutoOneToOneField(PatientRecord, on_delete=models.CASCADE)

	registration_date = models.DateField()
	last_visit = models.DateField(blank=True, null=True)

	# Keep track of how many times we're sending messsages to people
	# to make sure we don't spam them
	appointment_reminder_attempt = models.IntegerField(default=0)

	email_address = models.EmailField(blank=True, null=True)

Creating a Patient object does not automatically create a PatientRecord. I've tried creating via the admin as well as via the shell. Doesn't seem to work either way.

Django==2.0 django-annoying==0.10.3

sdawodu avatar Dec 20 '17 08:12 sdawodu

@arthurio Thanks, accessing the related object creates it.

http://www.techinfected.net/2018/02/automatically-create-onetoonefield-in-django.html

hiamandeep avatar Feb 22 '18 19:02 hiamandeep

Is primary_key=True required for this to work?

My model is defined as such:

class CrmCategory(models.Model):
    stats_list_direct = AutoOneToOneField('CrmCategoryStatsList',
                                          null = True,
                                          related_name = 'direct_category',
                                          help_text = 'What stats to list, as defined by this category directly.')
    stats_list_union = AutoOneToOneField('CrmCategoryStatsList',
                                         null = True,
                                         related_name = 'union_category',
                                         help_text = 'An or''ing of the direct stats, and the children''s stats_list_union')


And yet when I access it, I get a None:

    cat = CrmCategory.objects.all().first()
    print('union',  cat.stats_list_union)

albrnick avatar Feb 06 '19 20:02 albrnick

@albrnick You want to put the AutoOneToOneField on the CrmCategoryStatsList model instead:

class CrmCategoryStatsList(models.Model):
    category = AutoOneToOneField(...)

arthurio avatar Feb 08 '19 22:02 arthurio